我试图做一个脚本,将不断在后台运行。它的目标是检测USB闪存驱动器,外部硬盘驱动器或任何可连接到计算机的可写设备。一旦检测到它,它会复制该设备根目录下的文件。这里是我的代码(回声线是为了更清晰的调试):Errorlevel变量在错误后不会更改..?
@echo off
:loop
for /F "tokens=1*" %%a in ('fsutil fsinfo drives') do (
for %%c in (%%b) do (
for /F "tokens=4" %%d in ('fsutil fsinfo drivetype %%c') do (
if %%d equ amovible (
echo Found out that %%c is removable. Trying to echo the content...
dir %%c >NUL
echo Error: %errorlevel%
if %errorlevel%==0 (
echo Errorlevel is 0! Copying...
if not exist %%c\test.txt (
copy .\test.txt %%c\test.txt
echo.
)
) else (
echo Errorlevel isn't 0. Looks like the drive isn't here, or is unavailable. Aborting copying...
echo.
)
)
)
)
)
TIMEOUT 2
goto :loop
这就是问题所在。条件“if%errorlevel%== 0”应该检查“dir %% c> NUL”命令是否成功,所以如果errorlevel为0,这意味着设备上有一个文件系统,并且它不像空卡阅读器或空软盘驱动器。事情是当我执行我的代码时,errorlevel始终为0,我无法弄清楚为什么(“echo Error:%errorlevel%”告诉它)。所以文件test.txt在我的USB闪存驱动器上复制,所以这基本上工作,就是当它将文件复制到我的软盘驱动器,一个错误框显示,说我应该插入一个设备在阅读器,这就是为什么我想要做这个错误级别检查。
所以如果有人有解决方案,请帮助,我真的卡住了。 在此先感谢。
您需要使用[延迟扩展(http://ss64.com/nt/delayedexpansion.html)(''的ErrorLevel),否则,你得到的'ErrorLevel'!当整个圆括号的块(循环)被解析时出现... – aschipfl
哇,谢谢你!像魅力一样工作! – Alpha
你当然可以使用经典的'如果不是错误级别1 ...',它不需要延迟扩展。 – LotPings