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

私はSizeSmallMedium、またはLargeで始まる2行を削除する必要があり、ドルの金額を持っている私のバッチファイルはそれを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に保存します。
それ以外の場合は、行をトークン化します。トークンが1つしかない場合は、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 

(a)は、コマンドライン引数(複数可)としてテキストファイル(複数可)を提供し、スクリプトを使用するには:

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

すべての指定されたファイルを直接変更するので、テストするときに世話をされます!

関連する問題