我一直在努力编写一个脚本,可以从驱动器的其他属性中find驱动器索引号。 脚本如下:
@echo off REM batch file to load Veracrypt Set "driveIndex=" for /f "skip=1 tokens=1 delims= " %%a in ('wmic diskdrive where "model ='WD Elements 1078 USB Device'" get index') do SET driveIndex=%%a & goto reportLetter :reportLetter if not defined driveIndex ( echo Error Occured! pause exit ) else ( echo \Device\Harddisk%driveIndex:~0%\Partition3 pause exit )
但是,脚本的输出是\Device\Harddisk1 \Partition3
。 我尝试了很长一段时间,但可以让脚本给出以下输出: \Device\Harddisk1\Partition3
。
任何人都可以告诉我如何纠正代码来获得所需的输出?
尝试这个
DO SET "driveIndex=%%a"
你的线
... do set driveIndex=%%a & goto ...
被解释为set driveIndex=%%a<space>& goto ...
,这是, \Device\Harddisk1 \Partition3
中的额外空间来自何处。
当然你可以写:
... do set driveIndex=%%a& goto ...
但更好的语法是:
... do set "driveIndex=%%a" & goto ...
这消除了任何意想不到的空间。
注1: set
空间非常挑剔。 set var = hello
用值<space>hello<space>
创建一个名为var<space>
的变量。
笔记2:
set var="value"
将值设置为"value"
set "var=value"
将值设置为value
。 这个语法给你完整的(和可见的)控制变量名称和它的值。
@ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET DRIVE_INDEX= FOR /F "usebackq skip=1" %%i IN (`wmic diskdrive where "model = 'HGST HTS725050A7E630 ATA Device'" get index`) DO ( IF "!DRIVE_INDEX!" EQU "" (SET DRIVE_INDEX=%%i) ) ECHO DRIVE_INDEX is set to %DRIVE_INDEX%
我相信问题是WMIC输出是Unicode。
我会尝试
for /f "skip=1 tokens=1 delims= " %%a in ('wmic diskdrive where "model ='WD Elements 1078 USB Device'" get index^|more') do SET driveIndex=%%a & goto reportLetter
^|more
转换为ANSI。 脱字符号逃脱管道告诉cmd
管道是要执行的命令的一部分。