Batch file 将参数从一个批处理文件传递到另一个批处理文件
我有两个批处理文件 第一个需要一个输入参数,它是父文件夹的路径。它读取父文件夹中所有子文件夹的名称,并为每个子文件夹执行第二个批处理文件 批处理文件1Batch file 将参数从一个批处理文件传递到另一个批处理文件,batch-file,Batch File,我有两个批处理文件 第一个需要一个输入参数,它是父文件夹的路径。它读取父文件夹中所有子文件夹的名称,并为每个子文件夹执行第二个批处理文件 批处理文件1 @echo off for /d %%Y in (%1/*) do ( set SubfolderNameAndPath=%%Y call batch2.bat %SubfolderNameAndPath% ) 第二个批处理文件使用子文件夹名称和路径作为输入参数,并对每个子文件夹中存在的所有文件执行Evaluate.exe。它将Eval
@echo off
for /d %%Y in (%1/*) do (
set SubfolderNameAndPath=%%Y
call batch2.bat %SubfolderNameAndPath%
)
第二个批处理文件使用子文件夹名称和路径作为输入参数,并对每个子文件夹中存在的所有文件执行Evaluate.exe。它将Evaluate.exe的结果保存到文本文件“results”中,该文件的扩展名包含每次访问的子文件夹的名称。(results\un1.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定义输入参数的方式出了问题,但我无法弄清楚它是什么
%子文件夹名称和路径%
不包含任何空格。文件夹的路径都没有。
我非常感谢您在这方面的帮助。首先,在括号内的一对中,您不能设置变量,然后用%访问它。您必须首先(在
for
循环之前)设置本地enabledelayedexpansion
,然后使用访问变量代码>,而不是%
但是,既然您不使用%子文件夹名称和路径%
执行任何操作,那么您应该消除它
其次,您需要对包含空格的路径进行补偿,所以希望下面的代码能够为您提供帮助。为此,批处理对传递给的参数使用特殊的表示法,以删除其周围的双引号。因此,如果%1
==“此字符串”
,则%~1
=此字符串
。另外,如果%1
=此字符串
,则%~1
仍然=此字符串
。因此,使用%~1
符号没有缺点,除非您想保留任何双引号
因此,intbatch1.bat
,我们删除了%1
周围的任何潜在引号,然后在%~1/*
周围加上双引号,还有双引号%%Y
,以防其中有空格
batch1.bat
@echo off
for /d %%Y in ("%~1/*") do call batch2.bat "%%~Y"
@echo off
for %%X in ("%~1/*") do (
echo Evaluate.exe "%%~X" AnotherArgumentHere -o "results_%~n1.txt"
)
然后我们对batch2.bat做同样的事情,但更多
batch2.bat
@echo off
for /d %%Y in ("%~1/*") do call batch2.bat "%%~Y"
@echo off
for %%X in ("%~1/*") do (
echo Evaluate.exe "%%~X" AnotherArgumentHere -o "results_%~n1.txt"
)
编辑:2012/09/05 15:21
你觉得这个怎么样?而不是调用seprate批处理:
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 AnotherArgumentHere-o“results\uuu.txt”
子文件夹名称和路径%
中的任何值在名称和/或路径中是否有空格?@LittleByTables路径和子文件夹名称和路径%
中都不包含空格。我尝试了你提出的方法,但它似乎在某种程度上让我陷入了与以前相同的境地。因为我所有的文件名都包含空格子文件夹(如果这些文件是)不包含任何空格,或者对于我的情况,使用双引号的运算符似乎不是必需的。两个脚本在独立运行时都运行良好。但是,当第一个调用第二个时,仍然会出现一些问题……好的,给我一个目录内容示例和您试图构造的行的示例。