无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3134|回复: 3
打印 上一主题 下一主题

请教一批处理!!

[复制链接]
跳转到指定楼层
1#
发表于 2011-9-15 09:51:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的:替换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 编辑 ]
2#
发表于 2011-9-15 13:24:21 | 只看该作者
我是菜鸟,谈谈看法。
问题可能出在call这一句。后面的变量被预处理两次。
我感觉你这个写的有点复杂,直接echo %var:11=6%就完了。不用set var=%var:11=6%
call echo %%var%%
我记得好像说call无法接受管道符还是什么东东,忘了。
菜鸟回答,如有不对之处,请指正。
回复

使用道具 举报

3#
发表于 2011-9-15 16:46:49 | 只看该作者

回复 #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 编辑 ]
回复

使用道具 举报

4#
 楼主| 发表于 2011-9-16 13:26:09 | 只看该作者
研究了半天弄明白了楼上的批,代码很好用,非常感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-16 18:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表