如果set变量长度为2位,则删除字符串的最后2个字符

时间:2017-05-01 17:59:07

标签: windows batch-file cmd

如果添加的set变量是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

2 个答案:

答案 0 :(得分: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的值,即%i:~1%,以获得始终为四位数的数字。 i的增量以相同的方式工作,只需将Limit30更改为10030

答案 1 :(得分: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个字符。