中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]非常感谢HAT的帮助:删除文本中的指定字符串
作者:
标题: [求助]非常感谢HAT的帮助:删除文本中的指定字符串 上一主题 | 下一主题
xugq
初级用户





积分 56
发帖 24
注册 2006-12-25
状态 离线
『楼 主』:  [求助]非常感谢HAT的帮助:删除文本中的指定字符串

昨天有幸得到论坛上HAT朋友的帮助不胜感激.激发了我学习dos批处理的热情. 经过我今天一天的努力,终于有了结果.真的非常高兴. 我把HAT兄弟提供的代码给改写了一下.希望大家能帮我看看有什么问题没有 HAT 朋友的源代码:
@echo off
>b.txt type nul
for /f "tokens=1-2 delims==" %%a in (a.txt) do (
  if "%%b" equ "" (
    >>b.txt echo %%a
  ) else (
    set str=%%b
    setlocal enabledelayedexpansion
    if "!str:~1,1!" neq ":" (
      >>b.txt echo %%a=%%b
    ) else (
      >>b.txt echo %%a=e!str:~1!
    )
    endlocal
  )
)
move /y b.txt a.txt
后来经过我一天的研究给改成
@echo off
>b.txt type nul
for /f "tokens=1* delims=:" %%a in (a.txt) do (
  if "%%b" equ "" (
    >>b.txt echo %%a %%b
  ) else (
    set str=%%b  
    set atr=%%a
    setlocal enabledelayedexpansion
    if "!str:~0,1!" neq "\" (
      >>b.txt echo %%a:%%b
    ) else ( 
      >>b.txt echo !atr:~0,-1!E:%%b
    )
    endlocal
  )
)
move /y b.txt a.txt
这里边还好多问题不明白为什么.反正是能运行.哈哈. 我想大家热心是热心,但是归根结底自己还是要明白为什么. 谢谢HAT朋友了.啥也不说了. ───────────────── 版务记录 ───────────────── 执行:HAT 操作:在帖子标题中增加搜索关键字;代码加code标签 说明:原标题"[求助]非常感谢HAT兄弟的无私帮助"不利于论坛搜索 处罚:因属论坛新人,不予积分处罚 提示:请访问 {7326}论坛新手必读,所有人的基本行为准则[转帖] ───────────────── 版务记录 ───────────────── [ Last edited by HAT on 2008-9-24 at 09:13 PM ]


2008-9-23 15:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xugq
初级用户





积分 56
发帖 24
注册 2006-12-25
状态 离线
『第 2 楼』:  

啊.刚刚自己试运行又发现了个小问题.又改了一下 改完如下 @echo off >b.txt type nul for /f "tokens=1* delims=:" %%a in (a.txt) do ( if "%%b" equ "" ( >>b.txt echo %%a:%%b ) else ( set str=%%b set atr=%%a setlocal enabledelayedexpansion if "!str:~0,1!" neq "\" ( >>b.txt echo %%a:%%b ) else ( >>b.txt echo !atr:~0,-1!E:%%b ) endlocal ) ) move /y b.txt a.txt 这个批处理命令实现的目的就是删除文本中第一个包含:\的字符串的前一个字符 基本打到目的了.哈哈.就是要是比较长的文本运行起来比较慢..


2008-9-23 16:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xugq
初级用户





积分 56
发帖 24
注册 2006-12-25
状态 离线
『第 3 楼』:  

另外还有几个问题想麻烦大家 就是在上边的代码中后的地方我一开始想这样的: ) else ( set ccc=%%a:~0,-1% >>b.txt echo %ccc%E:%%b ) 但是怎么试都不成功.后来从if "!str:~0,1!" 这段中得到启发最后想干脆试试, 没相到居然能行.我就不明白.这是为什么呢? 还有就是为什么非要是!atr:~0,-1!而%atr%:~0 -1%不行呢? 是语法有问题么?


2008-9-23 16:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  

%%a 这种for循环的控制变量不允许进行变量扩展




2008-9-23 17:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 5 楼』:  

你是删除全部:\的字符串的前一个字符 还是文本的第一个呢? 如果是删第一个 试下面的是否快点
@echo off&setlocal enabledelayedexpansion
cd.>b.txt
for /f "delims=" %%i in (a.txt) do (
    set /a n+=1
    set str1=%%i
    set str2=!str1::\=!
    if "!str1!" neq "!str2!" goto lp
    >>b.txt echo %%i
   )
:lp
for /f "tokens=1* delims=:" %%i in ("%str1%") do set str=%%i&set E=%%j
>>b.txt echo %str:~0,-1%E:%E%
>>b.txt more +%n% a.txt
move /y b.txt a.txt




简单!简单!再简单!
2008-9-23 17:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xugq
初级用户





积分 56
发帖 24
注册 2006-12-25
状态 离线
『第 6 楼』:  

楼上的兄弟.不是文本的第一个.有可能在文本中的任意一行中的任意一个地方.


2008-9-23 19:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: