大家都知道如果在脚本行首启用延迟变量(setlocal EnableDelayedExpansion)那么会把文本中所有的感叹号抛弃,解决办法用call也不尽人意!
例如1:
set num=0
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('findstr /n .* a.txt') do (
set /a num+=1
set "str=%%i"
echo 第 !num! 行: !str:*:=!
)
pause
文本内容为:
;;;ef &
;:;
::;;
&
^
!<
!
%
"
""
'
""
""
""
""
""
!
但看了以前namejma版主的一段代码,如下2:
set num=0
for /f "delims=" %%i in ('findstr /n .* a.txt') do (
set /a num+=1
set "str=%%i"
setlocal enabledelayedexpansion
echo 第 !num! 行: !str:*:=!
endlocal
)
pause
这段是在for语句内部调用延迟变量能完全兼容感叹号、连接符号、重定向符号、行首分号、行首冒号. 问题就是:为什么在FOR语句内调用延迟变量,延迟变量不会抛弃"!"号?难道是跟延迟变量预处理环境的位置有关?在例1中先执行的延迟变量环境所以会抛弃所有"!"号,在例2中变量str赋值后在执行延迟变量为什么就不抛弃"!"号?何解?请大家告知其中原因,谢谢!作者: lxmxn 时间: 2007-12-26 16:21
Quote:
set num=0
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('findstr /n .* a.txt') do (
set /a num+=1
set "str=%%i"
echo 第 !num! 行: !str:*:=!
)
pause