[英]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.