【发布时间】:2014-05-06 15:31:35
【问题描述】:
我正在编辑一个 XML 文件,前 10 行大约是 cmets。而对于 xml cmets 的形式是
<!-- COMMENT HERE -->
但是当使用我的代码时它不会输出那个!标记,它搞砸了 xml 中的 cmets。我知道 ENABLEDELAYEDEXPANSION 这样做是因为它认为感叹号正在扩展变量。我怎样才能让它工作?
下面是我的代码
setlocal ENABLEDELAYEDEXPANSION
set line=0
FOR /f "usebackqdelims=" %%a in ("%filename2%") do (
set /a line = !line!+1
if !line!==39 (echo REPLACED TEXT39>>%tempfile%
)else if(!line!==45 (echo REPLACED TEXT45>>%tempfile%
)else (echo %%a>>%tempfile%
))
EDIT1 基本上它应该做的是按原样输出每一行,除非它是第 39 行或第 45 行。它可以工作,除了 ! cmets 中的标记不会被输出,它们不再是 cmets。
EDIT2
set line=0
FOR /f "usebackqdelims=" %%a in ("%filename2%") do (
setlocal ENABLEDELAYEDEXPANSION
set /a !line! +=1
echo !line!
if !line!==39 (
echo REPLACED TEXT39>>%tempfile%
endlocal
)else if !line!==45 (
echo REPLACED TEXT45>>%tempfile%
endlocal
)else (
endlocal
setlocal DISABLEDELAYEDEXPANSION
echo %%a>>%tempfile%
endlocal
))
这是我一直在使用的最新代码。它效果最好,但现在的问题是变量“line”没有得到更新。我有一种感觉,这是因为“endlocal”。唯一的问题是我需要那里的“endlocal”,否则我会收到错误
已达到最大 setlocal 递归级别。
问题是,我需要在 enableddelayedexpansion 和 disabledelayedexpansion 之间切换,这样我的感叹号才能正确显示。但要做到这一点,我需要跟上“endlocal”调用,我认为这会弄乱我的 line 变量。有什么想法吗?
【问题讨论】:
-
else if不是命令,您需要空格 ala) else ( -
哦,好的,我可以稍后解决这部分问题...
-
if(!line!==45是非法的,应该是if !line!==45 -
set /a !line! +=1不能工作,因为!line!将被扩展为空。并且不需要在 enabledDelExp 中使用set /a line+=1
标签: shell batch-file