无忧启动论坛

标题: 请教一批处理!! [打印本页]

作者: FLOPPY    时间: 2011-9-15 09:51
标题: 请教一批处理!!
目的:替换test.txt的字符,test.txt内容:
11111 55111
2222 222
33 333 333111
4411  444

批脚本1(用call不用变量延迟失败):
@echo off
for /f "delims=*" %%a in (d:\test.txt) do (
set var=%%a
set var=%var:11=6%
call echo %%var%% >>testok.txt
)
pause
执行后d:\testok.txt的内容为
11=6
11=6
11=6
11=6
批脚本2(启用变量延迟能实现目的):
@echo off
for /f "delims=*" %%a in (d:\test.txt) do (
setlocal enabledelayedexpansion
set var=%%a
set var=!var:11=6!
@echo !var! >>testok.txt
)
pause

执行后d:\testok.txt的内容为
661 5561
2222 222  
33 333 33361
446  444
不明白的是批脚本1(用call不用变量延迟)到底是哪里出错了?

[ 本帖最后由 FLOPPY 于 2011-9-16 13:27 编辑 ]
作者: hb_711    时间: 2011-9-15 13:24
我是菜鸟,谈谈看法。
问题可能出在call这一句。后面的变量被预处理两次。
我感觉你这个写的有点复杂,直接echo %var:11=6%就完了。不用set var=%var:11=6%
call echo %%var%%
我记得好像说call无法接受管道符还是什么东东,忘了。
菜鸟回答,如有不对之处,请指正。
作者: 2011_sim    时间: 2011-9-15 16:46
标题: 回复 #1 FLOPPY 的帖子
这样写:
@echo off
for /f "eol= delims=*" %%a in (%~d1%~p1222.txt) do (
set var=%%a
call set var=%%var:11=6%% &&call echo %%var%% >>%~d1%~p1testok.txt
)
if exist %~d1%~p1testok.txt (
   echo ————操作成功!生成的新文件内容如下:————&echo/
   more<%~d1%~p1testok.txt
        )else (
      echo 操作失败!
              )
echo ————————按任意键退出!—————————
pause>nul&exit
并且能够解决了行首/中出现; !的问题也能解决处理后行尾!变为;的问题。如果要替换行首含11之前的所有字符的话这样:*11=6

[ 本帖最后由 2011_sim 于 2011-9-16 21:37 编辑 ]
作者: FLOPPY    时间: 2011-9-16 13:26
研究了半天弄明白了楼上的批,代码很好用,非常感谢!




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3