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



我正在尝试写一个脚本,它将检测我的USB移动驱动器的字母称为"UUI"然后在上面创建一个文件夹。我写了几个命令的CMD,当单独运行时,工作。然而,当我把它们放入一个bat文件时,我总是得到一些错误。以下是bat文件中的命令:

for /F "tokens=1 delims= " %i in ('WMIC logicaldisk where "DriveType=2" list brief ^| c:windowssystem32find.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"运行文件时或者调用myscript .bat,我得到一个错误:

C: UUI Desktop>用户myScript.bat

windowssystem32find.exe此时出现意外

C:UsersUUIDesktop>for/F "tokens=1 delims= "windowssystem32find.exe "UUI"') do (echo i>drive.txt)

C: 用户 UUI Desktop>

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

我如何创建一个文件,它将成功运行,并检测我的移动驱动器的驱动器号没有问题?或者我如何解决错误"windowssystem32find.exe was unexpected at this ."?

您需要用于标记批处理脚本(.bat.cmd)中FOR循环控制变量的%符号,即使用%%i而不是纯CLI中使用的%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行为:每个输出行以0x0D0D0A (CR+CR+LF)结束,而不是常见的0x0D0A (CR+LF)。

可以使用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

Script 输出对于没有,然后一个然后两个 USB驱动器,分别为:

==>D:batSO31356732.bat
USBCounter=0
==>D:batSO31356732.bat
F:
USBCounter=1
==>D:batSO31356732.bat
F:
G:
USBCounter=2
==>

相关内容

  • 没有找到相关文章

最新更新