dja*_*fan 31 windows cmd batch-file
有谁能解释一下?我可以使用Windows命令提示符循环计数,使用此方法:
SET /A XCOUNT=0
:loop
SET /A XCOUNT+=1
echo %XCOUNT%
IF "%XCOUNT%" == "4" (
GOTO end
) ELSE (
GOTO loop
)
:end
Run Code Online (Sandbox Code Playgroud)
但是这种方法不起作用(它为文件中的每一行打印出"1").它的作用就像变量超出范围:
SET /A COUNT=1
FOR /F "tokens=*" %%A IN (config.properties) DO (
SET /A COUNT+=1
ECHO %COUNT%
)
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 59
它不起作用,因为在它开始执行之前,当遇到它时,正在评估整个 for循环(从for最终的右括号,包括那些之间的命令).
换句话说,在运行循环之前将%count%其替换为其值1.
你需要的是:
setlocal enableextensions enabledelayedexpansion
set /a count = 1
for /f "tokens=*" %%a in (config.properties) do (
set /a count += 1
echo !count!
)
endlocal
Run Code Online (Sandbox Code Playgroud)
使用!而不是延迟扩展%将为您提供预期的行为.另见这里.
还要记住,setlocal/endlocal实际上限制了内部变化的范围,以便它们不会泄漏.如果你想在count 之后使用endlocal,你必须使用你所遇到的问题所带来的"技巧":
endlocal && set count=%count%
Run Code Online (Sandbox Code Playgroud)
让我们说count在内在范围内成为7.因为整个命令在执行之前被解释,所以它实际上变为:
endlocal && set count=7
Run Code Online (Sandbox Code Playgroud)
然后,当它执行时,内部范围被关闭,返回count其原始值.但是,由于count在外部范围内设置为7,因此它会有效地泄露您需要的信息.
您可以将多个子命令串在一起,以便根据需要泄漏尽可能多的信息:
endlocal && set count=%count% && set something_else=%something_else%
Run Code Online (Sandbox Code Playgroud)
小智 17
对于a = 1到100步骤1
Windows中的命令行.如果在批处理文件中运行,请使用%% a.
for /L %a in (1,1,100) Do echo %a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
131257 次 |
| 最近记录: |