[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理for命令如何将指定字符(包括指定字符本身)之后的内容删除?

以下是text.txt的内容:
迅捷大仓鼠 效果怪兽 4 兽  地  1100 1800 3 10
元素英雄 金刃侠 效果怪兽 7 战士  地  2600 1800 3 10
宝石犰狳 效果怪兽 4 岩石  地  1700 500 3 20
宝石骑士·紫翠 效果怪兽 4 岩石  地  1800 1200 3 10

以下是我要提取的内容:
迅捷大仓鼠
元素英雄 金刃侠
宝石犰狳
宝石骑士·紫翠

虽然可以使用tokens=,但是有些时候我要提取的内容是第一节,有事时候是第一节和第二节(如:元素英雄 金刃侠),这种时候应该怎么办?
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

把“效果怪兽”替换为单字节分隔符:
  1. @echo off
  2. for /f "delims=" %%a in (1.txt) do (
  3.     set str=%%a
  4.     setlocal enabledelayedexpansion
  5.     for /f "delims=@" %%b in ("!str: 效果怪兽=@!") do echo %%b
  6.     endlocal
  7. )
复制代码
话说楼主玩游戏王?
1

评分人数

TOP

回复 2# CrLf


    我在KOD当版主,这是我在实际工作中遇到的问题

TOP

本帖最后由 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楼版主能否解释下,对于第一个问题我遇到几次了。

TOP

回复 4# zaixinxiangnian


    for 嵌套是一个整体,不能拆开来看。
  1. @echo off
  2. for /f "delims=" %%a in (1.txt) do (
  3.     rem 外层 for 获取 1.txt 内容,每行一循环,不以任何字符为分隔符
  4.     set str=%%a
  5.     rem 将本行内容设为 str 变量用于变量替换
  6.     setlocal enabledelayedexpansion
  7.     rem 开启变量延迟,以便在语块中引用变量。之所以在循环内才开启变量延迟,目的是兼容感叹号
  8.     for /f "delims=@" %%b in ("!str: 效果怪兽=@!") do echo %%b
  9.     rem 将变量 str 中的指定字符串替换为 @,并以此为分隔符显示第一节
  10.     endlocal
  11.     rem 结束本地化操作,目的是避免 setlocal 在循环中达到 32 层上限
  12. )
复制代码

TOP

  1. @echo off
  2. (For /f "tokens=1 delims=效" %%i in (a.txt) do echo %%i)>1.txt
  3. start 1.txt
  4. pause>nul
复制代码
直接以 效 为分隔符嘛。
1

评分人数

TOP

本帖最后由 zaixinxiangnian 于 2011-8-14 16:09 编辑

感动万分 非常感谢楼主给的详细解释

外层中的FOR把1.TXT中的每行带到DO后的FOR语句中分开执行

内层中的FOR一次读取在外层FOR获取的每一整行。在内层FOR中把“效果怪兽”替为@,以“@”为分隔符来提取

TOP

6楼简练,也兼容感叹号

TOP

返回列表