Batch file 循环批处理问题

Batch file 循环批处理问题,batch-file,for-loop,batch-processing,usb-drive,Batch File,For Loop,Batch Processing,Usb Drive,这个批处理脚本应该检测可移动驱动器,并通过以下过程循环每个驱动器:格式化,wrtie文件到。问题是它只对一个驱动器执行此操作。例如,我可以放入两个驱动器,它将同时检测它们,并对其中一个进行两次循环处理。这个问题与正在更新的驱动器名变量有关,但我对批处理脚本不是很在行。如果这个网站上已经有了另一个答案,我不知道它是什么样子,因为我不知道关于命令的一切(我已经看过所有给出的建议)。如果这是一个重复的问题,我深表歉意。只要给我指出正确的方向,我就上路了 @echo off setloc

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

    @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%
          )
       )
    )

在块语句
(一系列带括号的语句)
中,解析整个块,然后执行。在解析块时,块内的任何
%var%
都将替换为该变量的值——在执行块之前——这同样适用于。。。DO(块)

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

克服此问题的两种常见方法是:1)使用
setlocal enabledelayedexpansion
!瓦尔
代替
%var%
以访问
var
的更改值,或2)调用子例程以使用更改的值执行进一步处理


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

我从批处理脚本中删除了文件写入,因为如果格式有效,文件写入将有效。它不会改变任何内容。我将所有%yyy%替换为!yyy!。还是一样的问题。有什么想法吗?您是否也将
%yyy:~0,2%
更改为
!yyy:~0,2?关键是,在解析命令时,任何
%var%
都会被
var
的内容替换<代码>!瓦尔在delayedexpansion模式下,在te值发生变化时访问te值-即运行时值。除此之外,您还需要显示回声显示的内容。使用F:\Ending loop使用F:\Starting loop使用F:\Ending loop使用F:\Ending loop使用F:\Starting loop使用F:\Drive写入的文件系统类型为F:\FAT32。QuickFormatting 7.6 GB正在初始化文件分配表(FAT)。。。以F:\结束循环以F:\驱动器写入的开始循环是F:\文件系统的类型是FAT32。QuickFormatting 7.6 GB正在初始化文件分配表(FAT)。。。格式完整。以F:\结束循环,这就是它吐出的结果。如果我加上!yyy!在中间,用SETPATH Enable DelayExtPress回声初始化它!yyy!setlocal disabledelayedexpansion。。。它包括前面的驱动器(在本例中,cd驱动器和其中一个usb驱动器,在您进行实验时检测到它们的同时,
echo
the
格式…
行可能是一个非常好的主意。事实上,每次提到
yyy
的值似乎都是
F:`意味着
yyyy`没有被更改。请注意,您正在改变。)g
yyy
if..removable
块之后-这应该在前面。这可能解释了
驱动器在它之前的现象。
setlocal enable…
setlocal disable…
不会反转
local
环境,它会创建环境的新副本。要终止本地环境您需要执行
endlocal
命令或到达文件的物理结尾