私の以前の質問は、テキストファイルから複数の行を抽出することでした。これは現在正常に機能していますが、先頭と末尾の(トリッキーな部分)空白/タブスペースをトリミングするためにまだ改善が必要であり、Stackoverflowを介して検索すると、多くの答えが見つかりました。結合させてください私の最終的なバッチスクリプトですが、すべてをまとめると、そうではない可能性があります.
Details.txt (ソース ファイル)
line not needed, Copy and help with these command prompt:
line not needed:
(whitespace)(whitespace)some text not needed Copy "c:\.." a b c(white space)
line not needed:
line not needed, Copy and help with these command prompt:
(whitespace)Copy "d:\.." a c c(tab space)
line not needed
(tab space)(tab space)Copy "e:\.." a a c(whitespace)
line not needed
op.txt (出力ファイル)
Copy "c:\.." a b c
Copy "d:\.." a c c
Copy "e:\.." a a c
最初のバッチ スクリプトを見てみましょう。(トリムリードとトレイルスペースなし)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET source="details.txt"
IF EXIST %source% (
FIND /i "copy " <%source% |FIND "\" >op.txt
) ELSE (
Exit
)
リードスペースとトレイルスペースをトリムするための結合されたスクリプトにより、2つの出力が得られます(大したことではありません)。しかし、出力とコードの両方で短縮できれば素晴らしいことです。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET source="details.txt"
IF EXIST %source% (
FIND /i "copy " <%source% |FIND "\" >op.txt
>op2.txt (
FOR /f "delims=" %%A IN (op.txt) DO (
SET "ln=%%A"
SET str=!ln:*Copy=Copy!
FOR /l %%b IN (1,1,31) DO (
IF "!str:~-1!"==" " SET str=!str:~0,-1!
IF "!str:~-1!"==" " SET str=!str:~0,-1!
)
ECHO !str!
)
)
) ELSE (
Exit
)
私のソースファイルのほとんどの状況で実際に動作しますが、これは適切にコーディングされていない可能性があると確信しています. したがって、このバッチ スクリプトを出力などの方法で改善するか、より短い/より簡単なバージョンにするようお願いしたいと思います。
最初の問題の解決に協力してくれた foxidrive に感謝します。
David による更新版(すべての出力を含むようになりました)
@ECHO OFF
SETLOCAL
SET "sourceFile=details.txt"
SET "outputFile=opDavid.txt"
@ECHO OFF > "%outputFile%"
IF EXIST "%sourceFile%" FOR /f "delims=" %%A IN ('FIND /i "copy " ^<%sourceFile% ^|FIND "\"') DO CALL :Trim %%A >>%outputFile%
ENDLOCAL
EXIT /b 0
:Trim
ECHO(%*
EXIT /b 0
私の英語で申し訳ありません、それは私のコーディングのように貧弱です