gpt4 book ai didi

windows - 在CMD中检测可移动驱动器盘符

转载 作者:可可西里 更新时间:2023-11-01 10:20:01 24 4
gpt4 key购买 nike

我正在尝试编写一个脚本,它将检测我的 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 并通过调用“myScript.bat”或“call myScript.bat”运行文件时,出现错误:

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而不是 %i在纯 CLI 中使用。

但是,还有另一种可能的方法如何解析 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值(value);
  • %%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

脚本输出没有,然后是一个,然后是两个 USB 驱动器,分别是:

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

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

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

==>

关于windows - 在CMD中检测可移动驱动器盘符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31356732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com