0

私は2つのバッチファイルを持っています。

最初のものには、親フォルダーのパスである入力引数が必要です。親フォルダー内のすべてのサブフォルダーの名前を読み取り、サブフォルダーごとに 2 番目のバッチ ファイルを実行します。

バッチファイル 1

@echo off
for  /d %%Y in (%1/*) do (  
set SubfolderNameAndPath=%%Y
call batch2.bat %SubfolderNameAndPath% 
)

2 番目のバッチ ファイルは、SubfolderNameAndPath を入力引数として使用し、各サブフォルダーに存在するすべてのファイルに対して Evaluate.exe を実行します。Evaluate.exe の結果をテキスト ファイル "results" に保存します。拡張子には、毎回アクセスされたサブフォルダーの名前が付けられます。( results_%~n1.txt)。

バッチファイル 2

@echo off
for  %%X in (%1/*) do (  
echo Evaluate.exe  %%X AnotherArgumentHere -o results_%~n1.txt   
)

batch2.bat を呼び出しているように見えても、batch1( batch1.bat ParentFolderPath) を実行すると、batch2.bat が実行されません。batch2.bat の入力引数を定義する方法に問題があると思いますが、それが何であるかわかりません。

には%SubfolderNameAndPath%スペースが含まれていません。フォルダへのパスもありません。その点についてご協力いただければ幸いです。

4

1 に答える 1

1

まず、括弧で囲まれたペアの中にある場合、変数を設定してから%でアクセスすることはできません。最初に(forループの前に) 、次に'sではなく'ssetlocal enabledelayedexpansionを使用して変数にアクセスする必要があります。!%

%SubfolderNameAndPath%しかし、とにかく何もしないので、それを排除する必要があります。

次に、スペースを含むパスを補正する必要があるため、以下のコードがうまくいくことを願っています。これを行うために、batchは、渡される引数に特別な表記法を使用して、引数の前後の二重引用符を削除します。したがって、%1="This string"の場合、%~1= This string。また、%1=This stringの場合、%~1それでも= This string。したがって%~1、二重引用符を保持する場合を除いて、表記を使用しても問題はありません。

したがって、intbatch1.batは、を囲む可能性のある引用符をすべて削除してから、%1の周りに二重引用符を配置し、スペースがある場合に備えて%~1/*二重引用符も配置します。%%Y

batch1.bat

@echo off
for  /d %%Y in ("%~1/*") do call batch2.bat "%%~Y"

次に、同じことを行いますがbatch2.bat、それ以上のことを行います。

batch2.bat

@echo off
for  %%X in ("%~1/*") do (
  echo Evaluate.exe  "%%~X" AnotherArgumentHere -o "results_%~n1.txt"
)

編集: 2012/09/05 15:21

これはどうやってあなたをつかむのですか?別のバッチを呼び出す代わりに:

for /d %%x in (%1\*) do (
  for /f "tokens=*" %%y in ( 'dir /b /a:-d "%%~dpnxx"' ) do (
    echo Evaluate.exe %%~nxy AnotherArgumentHere -o "results_%%~nxx.txt" 
  )
)

(上記はすべて1行にまとめることができ、角かっこを削除するだけです。)

出力は次のとおりだと思います。
Evaluate.exe <file_name> AnotherArgumentHere -o "results_<directory_name>.txt"

于 2012-09-04T18:47:12.180 に答える