Batch file 将参数从一个批处理文件传递到另一个批处理文件

Batch file 将参数从一个批处理文件传递到另一个批处理文件,batch-file,Batch File,我有两个批处理文件 第一个需要一个输入参数,它是父文件夹的路径。它读取父文件夹中所有子文件夹的名称,并为每个子文件夹执行第二个批处理文件 批处理文件1 @echo off for /d %%Y in (%1/*) do ( set SubfolderNameAndPath=%%Y call batch2.bat %SubfolderNameAndPath% ) 第二个批处理文件使用子文件夹名称和路径作为输入参数,并对每个子文件夹中存在的所有文件执行Evaluate.exe。它将Eval

我有两个批处理文件

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

批处理文件1

@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
符号没有缺点,除非您想保留任何双引号

因此,int
batch1.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路径和子文件夹名称和路径%
中都不包含空格。我尝试了你提出的方法,但它似乎在某种程度上让我陷入了与以前相同的境地。因为我所有的文件名都包含空格子文件夹(如果这些文件是)不包含任何空格,或者对于我的情况,使用双引号的运算符似乎不是必需的。两个脚本在独立运行时都运行良好。但是,当第一个调用第二个时,仍然会出现一些问题……好的,给我一个目录内容示例和您试图构造的行的示例。