如果添加的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
答案 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
的增量以相同的方式工作,只需将Limit
从30
更改为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个字符。