2016-12-03 58 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" 

每一個指定的文件直接修改,所以測試時要小心!