标题: [文本处理] [已解决]批处理for命令如何将指定字符(包括指定字符本身)之后的内容删除? [打印本页]
作者: 597476418 时间: 2011-8-13 19:35 标题: [已解决]批处理for命令如何将指定字符(包括指定字符本身)之后的内容删除?
以下是text.txt的内容:
迅捷大仓鼠 效果怪兽 4 兽 地 1100 1800 3 10
元素英雄 金刃侠 效果怪兽 7 战士 地 2600 1800 3 10
宝石犰狳 效果怪兽 4 岩石 地 1700 500 3 20
宝石骑士·紫翠 效果怪兽 4 岩石 地 1800 1200 3 10
以下是我要提取的内容:
迅捷大仓鼠
元素英雄 金刃侠
宝石犰狳
宝石骑士·紫翠
虽然可以使用tokens=,但是有些时候我要提取的内容是第一节,有事时候是第一节和第二节(如:元素英雄 金刃侠),这种时候应该怎么办?
作者: CrLf 时间: 2011-8-13 19:42
把“效果怪兽”替换为单字节分隔符:- @echo off
- for /f "delims=" %%a in (1.txt) do (
- set str=%%a
- setlocal enabledelayedexpansion
- for /f "delims=@" %%b in ("!str: 效果怪兽=@!") do echo %%b
- endlocal
- )
复制代码
话说楼主玩游戏王?
作者: 597476418 时间: 2011-8-13 20:15
回复 2# CrLf
我在KOD当版主,这是我在实际工作中遇到的问题
作者: zaixinxiangnian 时间: 2011-8-13 22:16
本帖最后由 zaixinxiangnian 于 2011-8-13 22:19 编辑
回复 2# CrLf
亲请版主解答:
我试验了好多遍。分开来试,到最后也没弄明白 这段代码的执行顺序。
for /f "delims=" %%a in (1.txt) do set str=%%a ******这段为什么赋予str值一直是1.txt中最后一行?
for /f "delims=@" %%b in ("!str: 效果怪兽=@!") do echo %%b 这段("!str: 效果怪兽=@!") 是替换字符串的吗?为什么又是双引号又是双!号?
整个代码的执行过程到底是怎么样的呀?2楼版主能否解释下,对于第一个问题我遇到几次了。
作者: CrLf 时间: 2011-8-13 22:36
回复 4# zaixinxiangnian
for 嵌套是一个整体,不能拆开来看。- @echo off
- for /f "delims=" %%a in (1.txt) do (
- rem 外层 for 获取 1.txt 内容,每行一循环,不以任何字符为分隔符
- set str=%%a
- rem 将本行内容设为 str 变量用于变量替换
- setlocal enabledelayedexpansion
- rem 开启变量延迟,以便在语块中引用变量。之所以在循环内才开启变量延迟,目的是兼容感叹号
- for /f "delims=@" %%b in ("!str: 效果怪兽=@!") do echo %%b
- rem 将变量 str 中的指定字符串替换为 @,并以此为分隔符显示第一节
- endlocal
- rem 结束本地化操作,目的是避免 setlocal 在循环中达到 32 层上限
- )
复制代码
作者: Hello123World 时间: 2011-8-14 15:18
- @echo off
- (For /f "tokens=1 delims=效" %%i in (a.txt) do echo %%i)>1.txt
- start 1.txt
- pause>nul
复制代码
直接以 效 为分隔符嘛。
作者: zaixinxiangnian 时间: 2011-8-14 15:45
本帖最后由 zaixinxiangnian 于 2011-8-14 16:09 编辑
感动万分 非常感谢楼主给的详细解释
外层中的FOR把1.TXT中的每行带到DO后的FOR语句中分开执行
内层中的FOR一次读取在外层FOR获取的每一整行。在内层FOR中把“效果怪兽”替为@,以“@”为分隔符来提取
作者: lvsehuaxue 时间: 2011-8-14 19:51
6楼简练,也兼容感叹号
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |