我试图写一个脚本,它会检测到我的USB可移动驱动器名为“UUI”的信,然后创build它的文件夹。 我已经为CMD写了几个命令,它们在单独运行时工作。 但是,当我把它们放入一个bat文件时,我总会遇到一些错误。 以下是bat文件中的命令:
for /F "tokens=1 delims= " %i in ('WMIC logicaldisk where "DriveType=2" list brief ^| c:\windows\system32\find.exe "UUI"') do (echo %i > drive.txt) set /p RemovableDriveLetter2= < drive.txt del /F /Q drive.txt set RemovableDriveLetter=%RemovableDriveLetter2:~0,1% %RemovableDriveLetter%: md MyNewFolder cd MyNewFolder
当我去cmd.exe并通过调用“myScript.bat”或“call myScript.bat”运行该文件时,出现错误:
C:\用户\ UUI \桌面> myScript.bat
\ windows \ system32 \ find.exe在这个时候是意外的。
C:\ Users \ UUI \ Desktop> for / F“tokens = 1 delims =”\ windows \ system32 \ find.exe“UUI”')do(echo i> drive.txt)
C:\ Users \用户UUI \桌面>
我可以看到MyNewFolder没有被创build。 但是,当我复制所有行并在CMD中运行它们(例如,不在.bat文件中)并逐个运行它时,它在cmd.exe实例中是完全可用的。
如何创build一个文件,这将成功运行,并检测我的可移动驱动器的驱动器号没有问题? 或者我该如何解决这个错误“\ windows \ system32 \ find.exe此时是意外的”。
您需要在批处理脚本( .bat
或.cmd
)中加倍用于标记FOR
循环控制变量的%
符号,即在纯CLI中使用%%i
而不是%i
。
但是,如何解析wmic
输出还有另一种可能的方法。 另请参阅Dave Benham的WMIC
和FOR /F
:针对结尾<CR>
问题的修复
@echo OFF SETLOCAL enableextensions set "USBCounter=0" for /F "tokens=2 delims==" %%G in (' WMIC logicaldisk where "DriveType=2" get DeviceID /value 2^>NUL ^| find "=" ') do for /F "tokens=*" %%i in ("%%G") do ( set /A "USBCounter+=1" echo %%i rem your stuff here ) echo USBCounter=%USBCounter% rem more your stuff here ENDLOCAL goto :eof
这里的for
循环是
%%G
来检索DeviceID
值; %%i
删除返回值中的结尾回车 : wmic
行为:每个输出行以0x0D0D0A
( CR+CR+LF
)而不是普通的0x0D0A
( CR+LF
) 0x0D0A
。 可以使用Caption
或Name
来代替DeviceID
:
==>WMIC logicaldisk where "DriveType=2" get /value | find ":" Caption=F: DeviceID=F: Name=F:
请注意, DriveType=2
可能不存在或多个磁盘:
==>WMIC logicaldisk where "DriveType=2" get /value | find ":" No Instance(s) Available. ==>WMIC logicaldisk where "DriveType=2" list brief DeviceID DriveType FreeSpace ProviderName Size VolumeName F: 2 2625454080 3918512128 HOMER G: 2 999600128 1029734400 LOEWE
脚本输出为no ,然后是一个 ,然后是两个 USB驱动器(s),分别为:
==>D:\bat\SO\31356732.bat USBCounter=0 ==>D:\bat\SO\31356732.bat F: USBCounter=1 ==>D:\bat\SO\31356732.bat F: G: USBCounter=2 ==>