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

[文本处理] for命令的delims和tokens怎么搭配使用分割字段

本帖最后由 pcl_test 于 2016-8-29 17:12 编辑

for /f delims tokens的问题
如果每行的文本有多个相同的分隔符怎么办?
比如
4、情歌-经典-黄灿-黄玫瑰.mp3
里面有3个-做分隔符,但是我想截取黄灿-黄玫瑰.mp3
那delims=-是不是没用?比如要delims=- - -,然后借用tokens=34才行?
或者有其它方法请明示。
1

评分人数

    • pcl_test: 发帖前先使用论坛搜索PB -3

  1. @echo off && setlocal enabledelayedexpansion
  2. if exist 2.txt (del /f /q 2.txt)
  3. for /f "delims=" %%i in (1.txt) do (
  4. set "var=%%i"
  5. for /f "tokens=3,4 delims=-" %%a in ("!var!") do (
  6. echo %%a-%%b>>2.txt
  7. )
  8. )
复制代码
【代码分析】
1.对tokens=3,4

TOP

回复 2# 诗歌王位
  1. @echo off
  2. for /f "tokens=2,* delims=-" %%i in ("情歌-经典-黄灿-黄玫瑰.mp3") do (
  3.     echo,%%j
  4. )
  5. pause
复制代码
2,* 比 3,4 更加灵活

TOP

本帖最后由 lyonamstrong 于 2016-8-28 23:30 编辑

试了下,如果把一行文本分隔成3块,要显示任意两块,23或者2,3或者2,*都不行。难道是我的姿势不对……
但是单独显示2或者3是可以的,所以分隔是没问题

TOP

这个时候,你该亮剑了,亮出你的代码啊。。。。。。同意3楼观点
[代码分析]
1.那个文本还是单个字段处理你都没有明确,注意下2楼的字段,即源文件都是放在1.txt的

TOP

本帖最后由 happy886rr 于 2016-8-29 08:37 编辑

回复 5# 诗歌王位 一行流
  1. @echo off&(for /f "delims=" %%A in ('type 1.txt') do (for /f "tokens=2* delims=-" %%a in ("%%A") do (echo %%b)))>2.txt
复制代码

TOP

回复 4# lyonamstrong


你要显示哪两块?把测试用例和测试结果分别发出来看看。

TOP

就是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
显示的是 经典
也就是说 ,*不起作用

TOP

for /f "tokens=2,* delims=-" %i in ("情歌-经典-黄灿-黄玫瑰.mp3") do (echo %j)

TOP

回复 8# lyonamstrong


    请仔细观察3楼代码,设置循环变量的时候从%%i开始,但是使用的时候是%%j

TOP

本帖最后由 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都无法实现。

TOP

please
问完这个我就不问了

TOP

回复 12# lyonamstrong
请认真查看for的基础教程
就没有tokens=1245这种写法,都是写为tokens=1,2,4,5

TOP

回复 13# happy886rr


    阿里嘎多!

TOP

回复 11# lyonamstrong


    建议把tokens放前面delims放后面

TOP

返回列表