2

現在、すべてのサブディレクトリにプロセスファイルが必要であるという問題に直面しています。次のようなforループを使用しています。

for /R %%x in (*.dat) do tool.exe -c -f -e "%%x"

これで、ツールがファイルを出力する以外はすべて処理され、そのファイルは常に、元のファイルが配置されていたディレクトリではなく、バッチスクリプトが起動されたディレクトリに配置されます。ツールの出力ディレクトリオプションとして%CD%を使用するなど、かなりの数のアプローチを試しましたが、ツールはそれをあまり好まなかったようで、エラーが発生しただけです。

現在、かなりの数のCLIツールでこの問題が発生したため、一般的な解決策を探しています。

4

3 に答える 3

4

私はこれに遅れていますが、Andriyの答えを補完するものとして、2つのFORループを組み合わせることで、BATを合理化できます。これは、わずかに効率的で、より明確になる可能性があります。

for /D /R %%d in (*) do (
  pushd %%d
  for %%x in (*.dat) do tool.exe -c -f -e "%%x"
  popd
)

追加のボーナスとして、このバージョンは、メインループが別のドライブを参照している場合(この特定のOPの質問には当てはまりません)を解決し、反復ごとに現在のディレクトリを復元する相対的なサイドバリューを持っています。他のコマンドがループに組み込まれている場合は、少し重要です。

于 2012-10-23T10:01:16.553 に答える
3

呼び出す前CDに、現在のディレクトリに移動できます。.dattool.exe

for /R %%x in (*.dat) do (cd "%%~dpx" & tool.exe -c -f -e "%%x")
于 2012-10-22T21:06:13.270 に答える
1

使用できますforfiles...

forfiles /s /C /m *.dat "cmd /c tools.exe @file"

詳細については、http://ss64.com/nt/forfiles.htmlを参照してください。

于 2012-10-22T20:56:36.557 に答える