Board logo

标题: [文本处理] [已解决]批处理for命令tokens能提取倒数第一段吗? [打印本页]

作者: asd821089612    时间: 2011-7-22 21:29     标题: [已解决]批处理for命令tokens能提取倒数第一段吗?

本帖最后由 asd821089612 于 2011-7-23 13:34 编辑

学习了for 命令,想问一个问题
如果指定delims=\ 想要截取每行的最后一节吗,该怎么写命令?
作者: CrLf    时间: 2011-7-22 21:32

本帖最后由 CrLf 于 2011-7-22 21:52 编辑

楼主举的这个例子真是太...巧了
以 \ 为分隔符取末尾字符时,可以利用 %%~nxa:
  1. @echo off
  2. set "str=123\abc\QWER\!@#$\test   "
  3. for /f "delims=" %%a in ("%str%") do echo %%~nxa
  4. pause
复制代码
不过尾部的空格会被去掉,解决方法是让它变得更像文件名...
  1. @echo off
  2. set "str=123\abc\QWER\!@#$\test   "
  3. for /f "delims=" %%a in ("%str%.$") do echo @%%~na@
复制代码

作者: Batcher    时间: 2011-7-22 21:40

批处理for命令获取倒数第二列
http://bbs.bathome.net/thread-473-1-1.html

批处理for命令获取最后一列
http://bbs.bathome.net/thread-9742-1-1.html
http://bbs.bathome.net/thread-13000-1-1.html
作者: asd821089612    时间: 2011-7-22 21:58

楼主举的这个例子真是太...巧了
以 \ 为分隔符取末尾字符时,可以利用 %%~nxa,不过尾部的空格会被去掉

还是不太懂,这个%%~nxa是什么东西,没见过
我原来有一个txt文件,里面装了一大堆文件的完整目录,想提出文件名,所以才这么问

那以后如果分隔符不是\ 那又该怎么办
作者: asd821089612    时间: 2011-7-22 22:01

3楼发的网站也看过了,其中是一种方法是将分隔符全部改为\  然后再用  %%~nxa  有什么别的办法不用这么麻烦?
作者: Batcher    时间: 2011-7-22 22:07

4# asd821089612


请在顶楼给出部分数据以便测试
作者: mxxcgzxxx    时间: 2011-7-22 23:13

还是不太懂,这个%%~nxa是什么东西,没见过
我原来有一个txt文件,里面装了一大堆文件的完整目录,想提出文件名,所以才这么问

那以后如果分隔符不是\ 那又该怎么办
asd821089612 发表于 2011-7-22 21:58


%%~nxa就是你想要的文件名啊。FOR中会自动识别文件名格式的多学习FOR命令哦 不过教学中是以%%I为例,他们是以%%a为例区别在这呵
%%~nxI和%%~nxa是不是很像啊
作者: asd821089612    时间: 2011-7-23 08:18

本帖最后由 asd821089612 于 2011-7-23 08:24 编辑

懂了,又增长了一点知识
那如果分隔符不是\ 除了我五楼提出的方法,还有什么方法呢
比如一个文本文件
  1. aaa'ddd'ttt'ggg
  2. eeew'fff
复制代码
要怎么提取ggg和fff呢
作者: mxxcgzxxx    时间: 2011-7-23 13:12

本帖最后由 mxxcgzxxx 于 2011-7-23 13:13 编辑

8# asd821089612


由于FOR/F对读取的列要手工设定,对于未知列数是无法自动读取到的,
还有一个方法就是双FOR套
第一个FOR 读行
第二个FOR分列读这行取值,保留最后一个值就行了
作者: asd821089612    时间: 2011-7-23 13:33

嗯,这样确实是可以的,解决了,谢谢




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2