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

时间:2015-07-11 11:31:11

标签: windows batch-file cmd removable-drive drive-letter

我正在尝试编写一个脚本,它会检测我的USB可移动驱动器的字母,称为" UUI"然后在其上创建文件夹。我为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并通过调用&#34; myScript.bat&#34;运行该文件时或者&#34;调用myScript.bat&#34;,我收到错误:

  

C:\用户\ UUI \桌面和GT; myScript.bat

     

\ windows \ system32 \ find.exe此时出乎意料。

     

C:\ Users \ UUI \ Desktop&gt; for / F&#34; tokens = 1 delims =&#34; \ windows \ system32 \ find.exe&#34; UUI&#34;&#39;)do(echo i&gt; drive.txt)

     

C:\用户\ UUI \桌面和GT;

我可以看到没有创建MyNewFolder。但是,当我复制所有行并在CMD中运行它们(例如不在.bat文件中)并逐个运行它时,它在cmd.exe实例中完全正常运行。

如何创建bat文件,该文件将成功运行并检测到我的可移动驱动器的驱动器号没有问题?或者我怎样才能解决错误&#34; \ windows \ system32 \ find.exe此时出乎意料。&#34;?

1 个答案:

答案 0 :(得分:2)

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

但是,还有另一种可能的方法来解析wmic输出。 另见Dave Benham的WMIC and FOR /F: A fix for the trailing <CR> problem

@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)而不是普通0x0D0ACR+LF)。

可以使用CaptionName代替DeviceID

==>WMIC logicaldisk where "DriveType=2" get /value | find ":"
Caption=F:
DeviceID=F:
Name=F:

请注意,{em>没有或更多磁盘存在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驱动器:< / p>

==>D:\bat\SO\31356732.bat
USBCounter=0

==>D:\bat\SO\31356732.bat
F:
USBCounter=1

==>D:\bat\SO\31356732.bat
F:
G:
USBCounter=2

==>