1

これらのフォーラムの知識を利用して、便利なバッチスクリプトをコンパイルしました。

Del "- Output.tx_"
Del "- Output.txt"

FOR %%I in (*.txt) do @echo Filename: %%~nxI >>"- Output.tx_" & echo. >>"- Output.tx_" & echo. >>"- Output.tx_" & FOR %%f in (%%I) do type %%I >>"- Output.tx_" & echo. >>"- Output.tx_" & echo. >>"- Output.tx_"

TYPE "- Output.tx_" | MORE /E /P /S > "- Output.txt"
Del "- Output.tx_"

私の自宅のコンピューターにはXP(SP3、32ビット)が搭載されており、スクリプトは以下に示すようにテキストファイルを完全に結合します。

Filename: Test1.txt  

[Text file 1 contents]

Filename: Test2.txt  

[Text file 2 contents] 

... and so on. 

しかし、私は数か月前に職場のコンピューターでこのスクリプトをテストとして実行し、問題が発生しました。稼働中のコンピューターにはWindows7(32ビット、SP1)が搭載されており、テキストファイルのタイトルのみが出力ファイルに結合されています。その結果、次のようになりました。

Filename: Test1.txt  

Filename: Test2.txt     

... and so on. 

スクリプトをWindows7で正しく動作させるためのコメントやフィードバックをいただければ幸いです。

ありがとう、

DWIC

4

1 に答える 1

1

私が考えることができる唯一のことは、Win7コンピューター上のテキストファイルの一部(またはすべて)の名前にスペースまたは特殊文字が含まれているため、TYPEがそれらを見つけることができないということです。これが発生した場合はエラーメッセージが表示されるはずですが、stderrをリダイレクトしていないため、出力ファイルにはありません。

この問題は、変数を引用することで解決できます。

コードは必要以上に複雑です。これは、引用の問題が修正されたことを除いて、同じことを行う簡略化されたバージョンです。stderrもリダイレクトしました。

@echo off
2>nul del "- Output.txt"
(
  for %%F in (*.txt) do @(
    echo Filename: %%F
    echo.
    echo.
    type "%%F"
    echo.
    echo.
  )
) | more /s /p >"- Output.tx_" 2>&1
move "- Output.tx_" "- Output.txt" >nul
于 2012-09-19T02:51:25.133 に答える