Batch file 循环批处理问题
这个批处理脚本应该检测可移动驱动器,并通过以下过程循环每个驱动器:格式化,wrtie文件到。问题是它只对一个驱动器执行此操作。例如,我可以放入两个驱动器,它将同时检测它们,并对其中一个进行两次循环处理。这个问题与正在更新的驱动器名变量有关,但我对批处理脚本不是很在行。如果这个网站上已经有了另一个答案,我不知道它是什么样子,因为我不知道关于命令的一切(我已经看过所有给出的建议)。如果这是一个重复的问题,我深表歉意。只要给我指出正确的方向,我就上路了Batch file 循环批处理问题,batch-file,for-loop,batch-processing,usb-drive,Batch File,For Loop,Batch Processing,Usb Drive,这个批处理脚本应该检测可移动驱动器,并通过以下过程循环每个驱动器:格式化,wrtie文件到。问题是它只对一个驱动器执行此操作。例如,我可以放入两个驱动器,它将同时检测它们,并对其中一个进行两次循环处理。这个问题与正在更新的驱动器名变量有关,但我对批处理脚本不是很在行。如果这个网站上已经有了另一个答案,我不知道它是什么样子,因为我不知道关于命令的一切(我已经看过所有给出的建议)。如果这是一个重复的问题,我深表歉意。只要给我指出正确的方向,我就上路了 @echo off setloc
@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`没有被更改。请注意,您正在改变。)gyyy
在if..removable
块之后-这应该在前面。这可能解释了驱动器在它之前的现象。setlocal enable…
。setlocal disable…
不会反转local
环境,它会创建环境的新副本。要终止本地环境您需要执行endlocal
命令或到达文件的物理结尾