检测CMD中的可移动驱动器号

我试图写一个脚本,它会检测到我的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此时是意外的”。

Solutions Collecting From Web of "检测CMD中的可移动驱动器号"

您需要在批处理脚本( .bat.cmd )中加倍用于标记FOR循环控制变量的%符号,即在纯CLI中使用%%i而不是%i

但是,如何解析wmic输出还有另一种可能的方法。 另请参阅Dave Benham的WMICFOR /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行为:每个输出行以0x0D0D0ACR+CR+LF )而不是普通的0x0D0ACR+LF0x0D0A

可以使用CaptionName来代替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 ==>