批量循环问题

时间:2014-06-16 14:42:32

标签: batch-file for-loop batch-processing usb-drive

此批处理脚本应该检测可移动驱动器,并通过以下过程循环每个驱动器:格式,文件到。问题是它只对一个驱动器执行此操作。例如,我可以放入两个驱动器,它将检测它们并处理它们的循环两次。这个问题与正在更新的驱动器名称的变量有关,但我并不是所有的批处理脚本。如果这个网站上已有另一个答案,我不会知道它的样子,因为我不知道关于这些命令的一切(我已经看了所有给出的建议)。如果这是一个重复的问题,我会道歉。只要指出我正确的方向,我就会在路上!

    @echo off
    setlocal enabledelayedexpansion
    for /F "tokens=1*" %%a in ('fsutil fsinfo drives') do (
       for %%c in (%%b) do (
          echo Starting loop with %yyy%
          for /F "tokens=3" %%d in ('fsutil fsinfo drivetype %%c') do (
             if %%d equ Removable (
                echo Drive written to is %yyy%
                format /y %yyy:~0,2% /fs:FAT32 /v:LCM2014 /q
             )
             set yyy=%%c
             echo Ending loop with %yyy%
          )
       )
    )

1 个答案:

答案 0 :(得分:2)

在块语句(a parenthesised series of statements)中,解析整个块并执行然后。块中的任何%var%将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于FOR ... DO (block)。< / p>

因此,IF (something) else (somethingelse)将在遇到%variables%时使用IF的值执行。

解决此问题的两种常见方法是1)使用setlocal enabledelayedexpansion并使用!var!代替%var%来访问已更改的var或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。

您发布的代码显然遇到yyy问题。尝试将%yyy%替换为!yyy!并查看差异。