0

フォルダ ツリーに含まれるファイルを一覧表示するレポートを作成する DOS バッチ ファイルがあります。以下のコードは、115,000 を超えるファイルに対して目的の出力を生成します。ただし、日付/時刻とファイル サイズが空白の 13 レコードが生成されます。(/b オプションを指定せずに) DIR コマンドを手動で実行すると、目的のファイル情報が表示されます。かなりの回避策コードを追加せずにこれを修正できますか?

FOR /f "tokens=*" %%A IN ('DIR "<Path>" /a:-d /b /s') DO (
  ECHO %%~tA %%~zA %%~dpA %%~nA %%~xA >> test.txt
)
4

1 に答える 1

1
(FOR /f "tokens=*" %%A IN ('DIR "<Path>" /a:-d /b /s') DO (
  if exists "%%~A" ECHO %%~tA %%~zA %%~dpA %%~nA %%~xA 
)) >> test.txt

日付/ファイルサイズを取得できない主な理由は、ファイルが見つからないことです。

あなたのコードはどのように機能しますか?

は、コマンドを実行for /fする別のcmdインスタンスを開始しますdir

すべてのデータが取得されてメモリにロードされると (つまり、cmd/dirコマンドが終了すると)、forは取得された行の反復処理を開始します。情報の検索と情報処理の間には、ある程度の時間が経過しています。

この時点で、問題のあるファイルが移動/削除/名前変更され、プロパティを取得するためにアクセスできない可能性があります。したがって、最初にファイルがまだ存在するかどうかを確認してください

追加の括弧とリダイレクトの変更は、echo操作ごとにターゲット ファイルを開く必要がないようにするためです。このように、ファイルはforコマンドの開始時に開かれ、最後に閉じられます。

于 2015-01-29T10:48:14.820 に答える