使用 FOR 循环将批处理文件中的变量传递给另一个批处理文件以处理文件夹列表

Passing a variable in batch file to another batch file with FOR loop to process list of folders

我在 DVD 上有一个文件夹列表,我想一次处理一个。我正在尝试使用 FOR 命令传递信息以在第二个批处理文件中设置为变量。

我让用户输入两个变量,然后我想要第三个变量来自我的文件夹列表。然后 运行 DVD 上每个文件夹的第二个批处理文件:

echo enter Drive letter
set /p Drive=

echo enter diskname
set /p diskname=

FOR /F %%i IN ('dir /ad /b e:\') DO set book=%%i


call Load.bat %drive% %diskname% %book%

然后在我的 load.bat 我有:

Set drive=%1
Set diskname=%2
Set book=%3

Copy %drive%\%book% \server\%book%

该脚本可以 运行 在 DVD 上的一个文件夹中正常运行。我怎样才能让它循环遍历每个文件夹?

谢谢!

FOR /F %%i IN ('dir /ad /b e:\') DO (
 set book=%%i
 call Load.bat %drive% %diskname% %%i
)

请注意,如果任何参数可能包含空格等分隔符,则参数需要是 "quoted"(必须是双引号),然后您应该使用 %~n(其中 n=1。 .3 在你的情况下)以访问子批次中的参数。

( 必须与 do 关键字在同一物理行上。其他数据可能在单独的行上,或者如果您愿意,也可以全部在一行上,但在那种情况下,它们需要用 & 分隔,例如

FOR...DO set book=%%i&call Load.bat "%drive%" "%diskname%" "%%i"

请注意,如果数据全部在一行中,则不需要括号。为简洁起见,我省略了 for 循环的主体,并为每个参数插入了引号,因此子批次将需要 %~1..%~3 去除这些引号。

实际上,您不需要将数据作为参数发送。辅助批处理可以访问(和更改)环境变量,因此这三个参数在执行辅助批处理时已经存在于变量中。