标题: [文本处理] for命令的delims和tokens怎么搭配使用分割字段 [打印本页]
作者: lyonamstrong 时间: 2016-8-28 22:51 标题: for命令的delims和tokens怎么搭配使用分割字段
本帖最后由 pcl_test 于 2016-8-29 17:12 编辑
for /f delims tokens的问题
如果每行的文本有多个相同的分隔符怎么办?
比如
4、情歌-经典-黄灿-黄玫瑰.mp3
里面有3个-做分隔符,但是我想截取黄灿-黄玫瑰.mp3
那delims=-是不是没用?比如要delims=- - -,然后借用tokens=34才行?
或者有其它方法请明示。
作者: 诗歌王位 时间: 2016-8-28 23:08
- @echo off && setlocal enabledelayedexpansion
- if exist 2.txt (del /f /q 2.txt)
- for /f "delims=" %%i in (1.txt) do (
- set "var=%%i"
- for /f "tokens=3,4 delims=-" %%a in ("!var!") do (
- echo %%a-%%b>>2.txt
- )
- )
复制代码
【代码分析】
1.对tokens=3,4
作者: GNU 时间: 2016-8-28 23:20
回复 2# 诗歌王位 - @echo off
- for /f "tokens=2,* delims=-" %%i in ("情歌-经典-黄灿-黄玫瑰.mp3") do (
- echo,%%j
- )
- pause
复制代码
2,* 比 3,4 更加灵活
作者: lyonamstrong 时间: 2016-8-28 23:28
本帖最后由 lyonamstrong 于 2016-8-28 23:30 编辑
试了下,如果把一行文本分隔成3块,要显示任意两块,23或者2,3或者2,*都不行。难道是我的姿势不对……
但是单独显示2或者3是可以的,所以分隔是没问题
作者: 诗歌王位 时间: 2016-8-29 07:35
这个时候,你该亮剑了,亮出你的代码啊。。。。。。同意3楼观点
[代码分析]
1.那个文本还是单个字段处理你都没有明确,注意下2楼的字段,即源文件都是放在1.txt的
作者: happy886rr 时间: 2016-8-29 08:30
本帖最后由 happy886rr 于 2016-8-29 08:37 编辑
回复 5# 诗歌王位 一行流- @echo off&(for /f "delims=" %%A in ('type 1.txt') do (for /f "tokens=2* delims=-" %%a in ("%%A") do (echo %%b)))>2.txt
复制代码
作者: GNU 时间: 2016-8-29 09:34
回复 4# lyonamstrong
你要显示哪两块?把测试用例和测试结果分别发出来看看。
作者: lyonamstrong 时间: 2016-8-29 10:01
就是3楼的那条代码
for /f "tokens=2,* delims=-" %%i in ("情歌-经典-黄灿-黄玫瑰.mp3") do (echo %%i)
我直接在cmd中打,所以是
for /f "tokens=2,* delims=-" %i in ("情歌-经典-黄灿-黄玫瑰.mp3") do (echo %i)
并不能显示 经典-黄灿-黄玫瑰.mp3
显示的是 经典
也就是说 ,*不起作用
作者: flyinnet9 时间: 2016-8-29 10:06
for /f "tokens=2,* delims=-" %i in ("情歌-经典-黄灿-黄玫瑰.mp3") do (echo %j)
作者: GNU 时间: 2016-8-29 10:12
回复 8# lyonamstrong
请仔细观察3楼代码,设置循环变量的时候从%%i开始,但是使用的时候是%%j
作者: lyonamstrong 时间: 2016-8-29 10:19
本帖最后由 lyonamstrong 于 2016-8-29 14:01 编辑
还想问问清楚
单个部分显示的实现了:
for /f "delims=、,-,. tokens=3" %a in (110.txt) do echo %a
单个部分一直到结尾显示也实现了:
for /f "delims=、,-,. tokens=2*" %a in (110.txt) do echo %a%b
但是显示当中几项的却存疑:
for /f "delims=、,-,. tokens=23" %a in (110.txt) do echo %a%b 这样无法实现
for /f "delims=、,-,. tokens=2,3" %a in (110.txt) do echo %a,%b 这样实现了,但是间隔号不是原来的“-”而是改成了“,”
我想请问有什么办法直接保留原来的间隔符号不变?
还有如果是5部分,那tokens=1245如何实现?我试过了,12或45都无法实现。
作者: lyonamstrong 时间: 2016-8-29 15:20
please
问完这个我就不问了
作者: happy886rr 时间: 2016-8-29 15:39
回复 12# lyonamstrong
请认真查看for的基础教程
就没有tokens=1245这种写法,都是写为tokens=1,2,4,5
作者: lyonamstrong 时间: 2016-8-29 17:48
回复 13# happy886rr
阿里嘎多!
作者: GNU 时间: 2016-8-29 19:18
回复 11# lyonamstrong
建议把tokens放前面delims放后面
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |