【问题标题】:Extract a number from string in batch script从批处理脚本中的字符串中提取数字
【发布时间】:2015-07-21 08:46:22
【问题描述】:

我一直在努力编写一个脚本,该脚本将从驱动器的其他属性中找到驱动器索引号。脚本如下:

@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

谁能告诉我如何更正代码以获得所需的输出?

【问题讨论】:

标签: regex windows batch-file batch-processing


【解决方案1】:

试试这个

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 创建一个名为 var<space> 的变量,其值为 <space>hello<space>

注2:

set var="value" 将值设置为"value"

set "var=value"将值设置为value。此语法使您可以完全(且可见)控制变量名称及其值。

【讨论】:

  • 目前为止的最佳答案,但您确实应该解释为什么这样做会更好地使您的答案成为一个好答案。
  • 我想了更多关于 setcommand 引号的解释,以避免变量末尾的空格 - 这是问题中的问题。
  • 成功了!我不知道为什么这些引用有效,我打算找出答案,但它有效。
【解决方案2】:
@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%

【讨论】:

  • 不幸的是,这将返回一个空白 %drive_index%
  • 我修改了答案,请再试一次。谢谢。
  • 谢谢。像魅力一样工作。
【解决方案3】:

我认为问题在于 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 该管道是要执行的命令的一部分。

【讨论】:

  • |more 对我没有任何改变。 (WIN8.1)
猜你喜欢
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多