这个批处理怎么回事?为什么把这个符号!去掉了?

代码是:@echooffsetlocalenabledelayedexpansion(for/f"tokens=1*delims=:"%%iin('findstr/n.*... 代码是:
@echo off
setlocal enabledelayedexpansion
(for /f "tokens=1* delims=:" %%i in ('findstr /n .* 1.txt') do (
set s=%%j
if %%i==100 (echo !s:"abc"=:"123"!) else echo\!s!))>temp.txt
move /y temp.txt 1.txt

代码的意思就是。指定把1.txt里面的100行的"abc"替换成"123" 。运行这个bat后。怎么把我所有的感叹号全部去掉了?开头,中间,最后,几十个感叹号全部去掉了。怎么回事?这个 !符号
展开
 我来答
CHENGWENGJI
2012-09-14 · TA获得超过412个赞
知道小有建树答主
回答量:667
采纳率:66%
帮助的人:290万
展开全部
是因为英文的感叹号被命令“setlocal enabledelayedexpansion”屏蔽掉了。。。

你试试执行这段代码就知道了...
@ECHO OFF & setlocal enabledelayedexpansion
ECHO 这是中文感叹号:!!!
ECHO 这是英文感叹号:!!!
PAUSE
至于解决方法,可以借鉴一楼的,但不用下什么第三方软件
直接用批处理的方法就可以,先不写setlocal enabledelayedexpansion,将文本中的所有英文感叹号替换了,再指定把1.txt里面的100行的"abc"替换成"123",最后写setlocal disabledelayedexpansion,再将英文感叹号改回来,虽然有些麻烦呢...
sudoku52
2012-09-14 · TA获得超过7万个赞
知道大有可为答主
回答量:1.2万
采纳率:82%
帮助的人:4783万
展开全部
这种情况我喜欢的方法是,处理前先把!替换成☆(或其他文本中肯定没有的特殊字符),处理后再替换回来。
需要借助一个第三方命令行工具,国产高手白杨的wfr
@echo off
setlocal enabledelayedexpansion
wfr 1.txt -r:"!" -t:"☆"
(for /f "tokens=1* delims=:" %%i in ('findstr /n .* 1.txt') do (
set s=%%j
if %%i==100 (echo !s:"abc"=:"123"!) else echo\!s!))>temp.txt
move /y temp.txt 1.txt
wfr 1.txt -r:"☆" -t:"!"

wfr下载地址,百度搜索 白杨的原创免费作品,打开白杨网页找
wide find - replace

下载后解压到c:\windows\system32或批处理所在目录运行上面的批处理。

参考资料: 百度搜索 白杨的原创免费作品

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yyykkkyyyy
2012-09-14 · TA获得超过3136个赞
知道大有可为答主
回答量:2691
采纳率:40%
帮助的人:3268万
展开全部
@echo off&echo 稍候...
(for /f "tokens=1* delims=:" %%i in ('findstr/n .* "1.txt"')do (
set "s=%%j"
if %%i==100 (
setlocal enabledelayedexpansion
echo !s:"abc"=999!
endlocal)else echo\%%j
))>temp.txt
move temp.txt "1.txt"
echo\&set/p=处理完毕 按任意键退出... <nul&pause>nul
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式