【发布时间】:2012-06-09 11:07:36
【问题描述】:
我想修改几行特定行数的文本文件,我写了一个批处理文件如下:
@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 enabledelayedexpansion 和endlocal 命令放在for 循环中,否则特殊字符! 将被丢弃。
【问题讨论】:
-
如果您解释您正在尝试做什么以及究竟是什么不起作用,您获得帮助的机会将大大提高。对于不起作用的部分,您应该解释预期结果并描述您所看到的。
-
我没有尝试分析您的代码,但您不应该使用
set /a n+=1而不是set /a n=!n!+1 -
@panda-34 - 我更喜欢你建议的语法,但两者都应该工作。
-
但是延迟变体只能在
setlocal/endlocal块内工作,并且变量n不能真正增加
标签: windows batch-file