0

我有 2 个批处理文件。

第一个需要一个输入参数,它是父文件夹的路径。它读取父文件夹中所有子文件夹的名称,并为每个子文件夹执行第二个批处理文件。

批次文件 1

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

第二个批处理文件使用 SubfolderNameAndPath 作为输入参数,并对每个子文件夹中存在的所有文件执行 Evaluate.exe。它将 Evaluate.exe 的结果保存到文本文件“结果”中,该文件的扩展名带有每次访问的子文件夹的名称。( results_%~n1.txt)。

批处理文件 2

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

当我运行 batch1 ( batch1.bat ParentFolderPath) 时,即使它似乎调用了 batch2.bat,batch2.bat 也不会执行。我相信我为 batch2.bat 定义输入参数的方式出了点问题,但我无法弄清楚它是什么。

%SubfolderNameAndPath%不包含任何空格。文件夹的路径都没有。我真的很感谢你在这方面的帮助。

4

1 回答 1

1

好吧,首先,当在括号内时,您不能设置变量,然后使用 %'s 访问它。您必须首先(在for循环之前) ,然后使用's 而不是'ssetlocal enabledelayedexpansion访问您的变量。!%

但既然你无论如何都不做任何事情%SubfolderNameAndPath%,你应该把它消除掉。

其次,您需要补偿包含空格的路径,因此希望我下面的代码对您有用。为此,批处理对传递给的参数使用特殊符号来删除它们周围的双引号。所以,如果%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" 
  )
)

(以上可以全部放在一行,去掉括号即可。)

我假设输出是:
Evaluate.exe <file_name> AnotherArgumentHere -o "results_<directory_name>.txt"

于 2012-09-04T18:47:12.180 回答