批处理文件'for'并附加混淆

时间:2012-05-04 04:05:03

标签: batch-file for-loop

我正在尝试在我的批处理文件中创建一个例程,该例程会将调用添加到每个其他驱动器(包括闪存驱动器等)中的每个其他批处理文件的开头。我一直在使用嵌套的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%
)

1 个答案:

答案 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文件,那么您需要确保不要将其设置为无限调用自身。