2017-05-01 37 views
1

如果添加的設置變量是2位數字,有沒有辦法刪除最後兩位數字如果設置變量爲2位數字,刪除最後2個字符的字符串

例如。 000%i%可能等於0001或00015,因爲我需要它是0015而不是00015

然後,我不得不做出幾乎冗餘和不必要的代碼來繞過這個。

請忽略不良格式,這基本上是我第一次嘗試腳本編寫。

請參見下面的代碼:

@echo off 

set brokendriver=Qualcomm Atheros AR9285 Wireless Network Adapter 
set brokendriver1= Random Name 

set /a i=0 
set /a max=9 
set /a Limit=30 

:start 

IF %i%==%Limit% (Echo Driver Not Found 
pause 
exit) 

IF %i% LEQ %max% (
FOR /F "usebackq tokens=3*" %%A IN (`REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\000%i% /v DriverDesc`) DO (
    set drivername=%%A %%B 
    ) 
) ELSE (
FOR /F "usebackq tokens=3*" %%A IN (`REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\00%i% /v DriverDesc`) DO (
    set drivername=%%A %%B 
    ) 
) 

IF "%brokendriver%"=="%drivername%" (GOTO:next) 
IF "%brokendriver1%"=="%drivername%" (GOTO:next) 

set /a i+=1 
GOTO:start 

:next 
IF %i% LEQ %max% (
    FOR /F "usebackq tokens=3*" %%A IN (`REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\000%i% /v PnPCapabilities`) DO (
    set driveroldvalue=%%A %%B) 
    REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\000%i% /v PnPCapabilities /t REG_DWORD /d 24 /f 
    FOR /F "usebackq tokens=3*" %%A IN (`REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\000%i% /v PnPCapabilities`) DO (
    set drivernewvalue=%%A %%B 
    ) 
) ELSE (
    FOR /F "usebackq tokens=3*" %%A IN (`REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\00%i% /v PnPCapabilities`) DO (
    set driveroldvalue=%%A %%B) 
    REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\00%i% /v PnPCapabilities /t REG_DWORD /d 24 /f 
    FOR /F "usebackq tokens=3*" %%A IN (`REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\00%i% /v PnPCapabilities`) DO (
    set drivernewvalue=%%A %%B 
    ) 
) 

Echo Driver Name: "%drivername%" 
Echo Driver Old Value: %driveroldvalue% 
Echo Driver New Value: %drivernewvalue% 

pause 
+0

看看[子字符串擴展語法](http://ss64.com/nt/syntax-substring.html)... – aschipfl

回答

2

這是我想解決這個問題的辦法:

@echo off 

set brokendriver=Qualcomm Atheros AR9285 Wireless Network Adapter 
set brokendriver1= Random Name 

set /a i=10000 
set /a Limit=10030 

:start 

IF %i%==%Limit% (Echo Driver Not Found 
pause 
exit) 

FOR /F "usebackq tokens=3*" %%A IN (`REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\%i:~1% /v DriverDesc`) DO (
    set drivername=%%A %%B 
) 

變量i有10000的初始值,所以你只需要第一個數字後能得到我的價值,那就是%i:~1%得到總是有四位數的數字。 i的增量工作方式相同,只需要將Limit30更改爲10030

+0

非常聰明,謝謝你。 –

0

很難從所有的代碼,您正試圖把什麼告訴。

提示:@echo off後,放線

setlocal 

,這將確保您對環境做出任何更改批次結束時丟棄。這樣,您在調試時就不會從以前的運行中獲得陳舊的數據。

至於只獲取最後的n數字,您可以使用%var:~-n%,其中var包含您的字符串。

如果使用的是數字,然後

set /a var+=1000000 

將確保您的變量是7位數(提供var原本0..999999),然後%var:~-5%將提供最後5位數字。根據你的情況混合搭配。


例如

set /a paddedi=1000000+i 

FOR /F "usebackq tokens=3*" %%A IN (
`REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\%paddedi:~-4% /v DriverDesc` 
) DO set drivername=%%A %%B 

替換整個第二if語句,填充的i的值(大名稱用於可變!),然後使用最後4個字符所產生的填充可變的。

+0

道歉,請參閱第二個IF語句,基本上重複吧000%i %和00%i% –

+0

非常聰明,謝謝你 –

相關問題