我正在尝试使用 wmic 查找特定的 USB 驱动器,然后设置环境变量

我正在尝试使用 wmic 查找特定的 USB 驱动器,然后设置环境变量

我可以使用以下wmic命令找到该驱动器:

wmic logicaldisk where VolumeName='USB-BACKUP' get deviceid |find /v "DeviceID"

它返回Q:并且效果很好。但是,我也想,同时,将返回的驱动器号设置为环境变量。我查看了如何使用来设置它wmic,但找不到如何将其组合成单个命令。

这可能超出了这篇文章所需的内容,因为我真正想要的是:一个组合wmic命令,根据找到的 USB 驱动器设置环境变量。

以下所有方法都是为了使其正常工作而采取的临时措施。我将其发送到文本文件,然后通过以下方式将其读入环境变量:

wmic logicaldisk where VolumeName='USB-BACKUP' get deviceid |find /v "DeviceID" >c:\Util\DrvLtr.txt

set /p DrvLtr=<c:\UTIL\DrvLtr.txt

表面上看,这个方法行得通。但是,生成的文本文件实际上多出了 8 个错误的不可见字符,以及几个额外的 CR/LF。我担心这会在以后引起问题,果然如此。

使用已删除的文本文件,它将执行一个简单的操作dir %DrvLtr%,并且有效。但是,如果我执行以下操作:

if not (%DrvLtr%)==() echo %DrvLtr%

它显示以下错误:

)==()此时是出乎意料的。

我验证了它是由于文本文件中的垃圾而出错的。如果我通过记事本创建一个文本文件,其中包含一些内容Q:(当然,还有记事本在保存时添加的必需 CR/LF 对),它就可以正常工作。

不过不要偏离主题。最初的目标依然是:找到 USB 驱动器号并将其放入环境变量中。

你可能会问:“为什么?”这是用于无人值守的备份程序,你不能指望 USB 位于多台机器上的特定驱动器上。

答案1

您不需要"usebackq tokens=2 delims=="或者`/format:list ^| find /I "DeviceID"...

for /f %%a in ('wmic logicaldisk where VolumeName^='USB-BACKUP' get deviceid^|find ":"')do set "_DrvLtr=%%a" && call echo\%_DrvLtr%

答案2

用这个:

@echo off
for /f "usebackq tokens=2 delims==" %%a in (`wmic logicaldisk where "VolumeName='USB-BACKUP'" get deviceid /format:list ^| find /I "DeviceID"`) do set "DrvLtr=%%a"

您可以使用/format:list显示类似DeviceId=Q:格式并轻松进行解析for /f

相关内容