3

私の以前の質問は、テキストファイルから複数の行を抽出することでした。これは現在正常に機能していますが、先頭と末尾の(トリッキーな部分)空白/タブスペースをトリミングするためにまだ改善が必要であり、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

私の英語で申し訳ありません、それは私のコーディングのように貧弱です

4

3 に答える 3

2

パスに 2 つのヘルパー バッチ ファイルを配置すると、このコマンドはサード パーティのソフトウェアをインストールしなくても機能します。

type "source.txt" |repl "^[ \t]*" "" |repl "[ \t]*$" "" |findrepl "copy \x22" /i >op.txt

最初の 2 つreplのコマンドは、スペース/タブの先頭と末尾の空白を削除し、findreplコマンドはそれらに含まれる行をフィルター処理copy "します。

呼び出されたヘルパー バッチ ファイルはここrepl.batにあり ます。 呼び出されたヘルパー バッチ ファイルはここにあります。
findrepl.bat

両方をバッチ ファイルと同じフォルダー、または c:\windows\system32 または PATH ステートメントにある別のディレクトリに配置します。

于 2013-10-10T03:15:16.143 に答える