gpt4 book ai didi

Windows 批处理 : delayed expansion in a for loop

转载 作者:可可西里 更新时间:2023-11-01 10:07:56 25 4
gpt4 key购买 nike

我想修改特定行数的文本文件,写了一个批处理文件如下:

@echo off
set n=0
set n1=10
set n2=40
cd.>output.txt

for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "var=%%i"
setlocal enabledelayedexpansion
set /a n=!n!+1
echo.!n!
set var=!var:*:=!
rem if !n!=%n1% ...
rem if !n!=%n2% ...
(echo.!var!)>>output.txt
endlocal
)
start output.txt

然而,这并没有像预期的那样工作。
经过一些测试,我认为 !n! 扩展通常不会延迟。这很奇怪,因为 !var! 扩展通常会延迟。

顺便说一句,setlocal enabledelayedexpansionendlocal 命令放在for 循环中,否则特殊字符! 将被放弃。

最佳答案

我想您看到的问题是 n 永远不会增加。

但这不是延迟扩展的问题,这是循环内 setlocal/endlocal block 的效果。
正如 @panda-34 提到的,您应该使用 set/a 的扩展语法并将语句移到 setlocal/endlocal block 之外。

@echo off
set n=0
set n1=10
set n2=40

(
for /f "delims=" %%i in ('findstr /n .* test.txt') do (
set "var=%%i"
set /a n+=1
setlocal enabledelayedexpansion
echo !n!
set var=!var:*:=!
rem if !n!=%n1% ...
rem if !n!=%n2% ...
(echo(!var!)
endlocal
)
) >output.txt
start output.txt

关于Windows 批处理 : delayed expansion in a for loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10960467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com