问题是索引目录文件时的返回值。 首先,我需要循环我的数组,第二个是在目录中查找文件。返回值仍然没有变化,并显示所有变量的最新值。 是的我知道,这可能是因为我使用 setx 但是使用设置只是它绝对没有用。
for /L %%G in (1,1,%i%) do (
if NOT {arch}=={32} (
setx DriverPath !DefaultPath!driver\!DriverPath64[%%G]! >nul 2>&1
) else (
setx DriverPath !DefaultPath!driver\!DriverPath32[%%G]! >nul 2>&1
)
:: looking for inf file
for /r "%DriverPath%\" %%f in (*.inf) do (
set PrinterDriverInf[%%G]=%%f
)
)
答案 0 :(得分:2)
setx
?普通set
命令不够吗?请注意,setx
不会更改当前cmd
实例的变量。if not
语句将始终评估为True,因为您已在==
的任一侧声明了文字字符串。您的意思是%arch%
而不是arch
吗?!DriverPath!
的延迟展开。但是,for /R
无法使用延迟扩展的变量,因此您必须将for /R
循环移动到子例程中才能使用立即%
- 扩展,或者暂时更改为目录并让for /R
默认为该(已更改)当前目录。::
条评论,而是使用rem
。这是固定代码:
setlocal EnableDelayedExpansion
for /L %%G in (1,1,%i%) do (
if not "%arch%"=="32" (
setx DriverPath !DefaultPath!driver\!DriverPath64[%%G]! >nul 2>&1
set "DriverPath=!DefaultPath!driver\!DriverPath64[%%G]!"
) else (
setx DriverPath !DefaultPath!driver\!DriverPath32[%%G]! >nul 2>&1
set "DriverPath=!DefaultPath!driver\!DriverPath32[%%G]!"
)
rem looking for inf file
call :SUB PrinterDriverInf[%%G] "%DriverPath%"
)
endlocal
goto :EOF
:SUB
for /R "%~2" %%f in (*.inf) do (
set "%~1=%%f"
)
goto :EOF
你甚至可以像这样简化代码:
setlocal EnableDelayedExpansion
if not "%arch%"=="32" set "arch=64"
for /L %%G in (1,1,%i%) do (
setx DriverPath !DefaultPath!driver\!DriverPath%arch%[%%G]! >nul 2>&1
set "DriverPath=!DefaultPath!driver\!DriverPath%arch%[%%G]!"
rem looking for inf file
pushd "!DriverPath!" && (
for /R %%f in (*.inf) do (
set "PrinterDriverInf[%%G]=%%f"
)
popd
)
)
endlocal
答案 1 :(得分:0)
将::
评论更改为传统的rem
评论。
::
实际上是一个损坏的标签,标签(损坏或其他)导致代码块出现问题(带括号的语句序列)
答案 2 :(得分:0)
另一件事(我猜)是您尝试比较字符串{arch}
和{32}
。
这是命令解析器看到的内容:
if the string {arch} equals {32}, do something
我想你想要这个:
if the content of arch variable equals 32, do something
如果是这样,这将是你的命令。
if "%arch%"=="32" echo your commands here
始终使用引号"
代替{
和}
,因为它们更安全。