在CMD中检测可移动驱动器盘符
Detecting Removable drive letter in CMD
我正在尝试编写一个脚本,它将检测我的 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
当我通过调用“myScript.bat”或“call myScript.bat”转到 cmd.exe 和 运行 文件时,出现错误:
C:\Users\UUI\Desktop>myScript.bat
\windows\system32\find.exe was unexpected at this time.
C:\Users\UUI\Desktop>for /F "tokens=1 delims= " \windows\system32\find.exe "UUI"') do (echo i > drive.txt)
C:\Users\UUI\Desktop>
我可以看到没有创建 MyNewFolder。但是,当我在 CMD 中复制所有行并 运行 它们(例如不在 .bat 文件中)并一一 运行 它们时,它在 cmd.exe 实例中完全可用.
如何创建 bat 文件,该文件将成功 运行 并毫无问题地检测到我的可移动驱动器的驱动器盘符?或者如何解决错误“\windows\system32\find.exe 此时意外出现。”?
您需要加倍 %
符号用于在批处理脚本中标记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
删除值 return 结尾的 carriage returned: wmic
行为:每个输出行以 0x0D0D0A
(CR+CR+LF
) 而不是常见的 0x0D0A
(CR+LF
). 结尾
可以使用 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编写脚本output,然后one然后two USB 驱动器,分别为:
==>D:\bat\SO356732.bat
USBCounter=0
==>D:\bat\SO356732.bat
F:
USBCounter=1
==>D:\bat\SO356732.bat
F:
G:
USBCounter=2
==>
我正在尝试编写一个脚本,它将检测我的 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
当我通过调用“myScript.bat”或“call myScript.bat”转到 cmd.exe 和 运行 文件时,出现错误:
C:\Users\UUI\Desktop>myScript.bat
\windows\system32\find.exe was unexpected at this time.
C:\Users\UUI\Desktop>for /F "tokens=1 delims= " \windows\system32\find.exe "UUI"') do (echo i > drive.txt)
C:\Users\UUI\Desktop>
我可以看到没有创建 MyNewFolder。但是,当我在 CMD 中复制所有行并 运行 它们(例如不在 .bat 文件中)并一一 运行 它们时,它在 cmd.exe 实例中完全可用.
如何创建 bat 文件,该文件将成功 运行 并毫无问题地检测到我的可移动驱动器的驱动器盘符?或者如何解决错误“\windows\system32\find.exe 此时意外出现。”?
您需要加倍 %
符号用于在批处理脚本中标记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
删除值 return 结尾的 carriage returned:wmic
行为:每个输出行以0x0D0D0A
(CR+CR+LF
) 而不是常见的0x0D0A
(CR+LF
). 结尾
可以使用 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编写脚本output,然后one然后two USB 驱动器,分别为:
==>D:\bat\SO356732.bat
USBCounter=0
==>D:\bat\SO356732.bat
F:
USBCounter=1
==>D:\bat\SO356732.bat
F:
G:
USBCounter=2
==>