2016-12-03 75 views
-2

我拥有的数据主要以可以转换并导入电子表格的方式进行组织。但是某些行有回车符和我当前批处理文件不会使用的文本。使用换行符查找替换字符串的批量命令

不错的数据:

Pipers Cove × 2 $25.00 
Pipers Cove Petite × 2 $25.00 
Pipers Cove Plus × 2 $25.00 
Nordic Club × 2 $25.00 
Whiteout × 1 $12.50 

坏数据:

Pipers Cove Kids × 2 
Size: 
Large - ages 10 to 12 
$20.00 
Pipers Cove Kids × 2 
Size: 
Medium - ages 6 to 8 
$20.00 
Pipers Cove Kids × 2 
Size: 
Small - ages 2 to 4 
$20.00 

我需要删除2线开始SizeSmallMedium,或者Large和有美元的金额请按照数量编号,以便我的批处理文件可以将其转换为CSV文件等等。

回答

1
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
SET "filename1=%sourcedir%\q40953616.txt" 
SET "outfile=%destdir%\outfile.txt" 
SET "part1=" 
(
FOR /f "usebackqdelims=" %%i IN ("%filename1%") DO (
ECHO %%i|FIND "$" >NUL 
IF ERRORLEVEL 1 (
    REM $ not found - set part1 on first such line 
    IF NOT DEFINED part1 SET "part1=%%i" 
) ELSE (
    REM $ found - see whether at start or not 
    FOR /f "tokens=1*delims=$" %%a IN ("%%i") DO (
    IF "%%b"=="" (
    REM at start - combine and output and reset part1 
    CALL ECHO %%part1%% %%i 
    SET "part1=" 
    ) ELSE (
    ECHO %%i 
    ) 
) 
) 
) 
)>"%outfile%" 

GOTO :EOF 

你需要改变的sourcedirdestdir设置以适合你的情况。

我用了一个名为q40953616.txt的文件来存放我的测试数据。

生成定义为%outfile的文件%

扫描文件的每一行。如果该行不包含$,则将第一个这样的行保存在part1中。
否则,标记行。如果只有一个令牌,那么$位于该行的起始位置,所以需要将其与part1
组合输出。否则,只是反刍行。

0

尽管你没有表现出任何自己的努力,但我决定提供一个解决方案,因为手头的任务似乎对我来说并不是那么微不足道。

以下脚本 - 让我们将其称为clean-up-text-file.bat - 仅忽略以您指定的单词开头的行。任何其他行都会附加到前一个行,直到遇到$符号,在这种情况下会启动一个新的ine。用这种方法,不会有线路无意中丢失。

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Define constants here: 
set _WORDS="Size","Small","Medium","Large" 

for %%F in (%*) do (
    set "COLL=" & set "FILE=%%~F" 
    for /F delims^=^ eol^= %%L in ('type "%%~F" ^& ^> "%%~F" rem/') do (
     set "LINE=%%L" 
     (echo("%%L" | > nul find "$") && (
      setlocal EnableDelayedExpansion 
      >> "!FILE!" echo(!COLL!!LINE! 
      endlocal 
      set "COLL=" 
     ) || (
      set "FLAG=" 
      for %%K in (%_WORDS%) do (
       (echo("%%L" | > nul findstr /I /R /B /C:^^^"\"%%~K\>") && (
        set "FLAG=#" 
       ) 
      ) 
      if not defined FLAG (
       setlocal EnableDelayedExpansion 
       rem // The following line contains a TAB character! 
       for /F "delims=" %%E in (^""!COLL!!LINE! "^") do (
        endlocal 
        set "COLL=%%~E" 
       ) 
      ) 
     ) 
    ) 
) 

endlocal 
exit /B 

要使用脚本,提供您的文本文件(S)为(a)命令行参数(S):

clean-up-text-file.bat "good.txt" "bad.txt" 

每一个指定的文件直接修改,所以测试时要小心!