簡體   English   中英

從批處理腳本中的字符串中提取數字

[英]Extract a number from string in batch script

我一直在努力編寫一個腳本,該腳本將從驅動器的其他屬性中找到驅動器索引號。 腳本如下:

@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創建一個名為var<space>的變量,其值為<space>hello<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管道是要執行的命令的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM