Board logo

标题: [文本处理] 求教批处理for命令delims的用法解释 [打印本页]

作者: llqcnw    时间: 2021-7-13 17:23     标题: 求教批处理for命令delims的用法解释

for /f "eol=| delims=|" %%i in 1.txt do (                1.txt  文件里是很多个同名但存在在不同目录的文件的完整路径                   使用这个命令后 可以获取到所有的文件名            请教一下,  eol=|      delims=|    这两个是什么意思?
作者: yakeyun    时间: 2021-7-13 17:35

回复 1# llqcnw


批处理for语句从入门到精通,可以参考:http://www.bathome.net/thread-2189-1-1.html
作者: llqcnw    时间: 2021-7-13 17:48

回复 2# yakeyun


    看过了,但还是不明白把   |  作为分隔符是什么意思
作者: llqcnw    时间: 2021-7-13 17:50

回复 2# yakeyun


    delims=|    这是把   |  作为分隔符使用吗?
作者: llqcnw    时间: 2021-7-13 18:00

回复 5# idwma


    不太明白,我的那个txt里每一行是一个完整路径  比如d:\abc\3.txt   这样的      
用  |   作为分隔符就可以提取出文件名,为什么
作者: yakeyun    时间: 2021-7-13 18:35

本帖最后由 yakeyun 于 2021-7-13 18:52 编辑

回复 5# llqcnw


涉及到路径的就需要放一部分内容出来看看规律,有规律就好办,不然不好批量处理。比如路径层数是否一致
作者: newswan    时间: 2021-7-13 18:54

没有数据,说个>>>>>>
作者: llqcnw    时间: 2021-7-13 19:53

回复 7# yakeyun


1.txt文件里的内容如下:

d:\Fwkp\Bin\3.txt
d:\Fwkp\Bin\skfp.djgl.bin\3.txt
d:\Fwkp\新建文件夹 (2)\3.txt
d:\Fwkp\新建文件夹 (3)\3.txt
d:\Fwkp\新建文件夹 (4)\3.txt
d:\原版\Bin\3.txt
d:\原版\Bin\skfp.djgl.bin\3.txt
d:\问题\Bin\3.txt
d:\问题\Bin\skfp.djgl.bin\3.txt
作者: llqcnw    时间: 2021-7-13 19:54

使用的命令如下:



setlocal enabledelayedexpansion
set n=1
for /f "eol=| delims=|" %%i in 1.txt do (
copy "%%i" "c:\3\3-!n!.txt"
set /a n=!n!+1
)
作者: qixiaobin0715    时间: 2021-7-13 20:43

回复 10# llqcnw
有点耍花腔的味道:
按你的代码修改,看一看显示的%%i是什么
  1. @echo off
  2. for /f "eol=| delims=|" %%i in (1.txt) do echo,%%i
  3. pause
复制代码
代码这样写要规范些:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (1.txt) do (
  4.     set /a n+=1
  5.     copy "%%i" "c:\3\3-!n!.txt"
  6. )
  7. pause
复制代码

作者: llqcnw    时间: 2021-7-13 20:50

回复 11# qixiaobin0715


    好的,谢谢

我也是从其他地方借鉴来的命令,我感觉复杂了,想简化一下,但是没有搞懂那个  |  的用法,所以就来请教
作者: llqcnw    时间: 2021-7-13 20:56

本帖最后由 llqcnw 于 2021-7-13 21:03 编辑

回复 11# qixiaobin0715


    代码非常好用,实现目的,而且很简单。   


之前把问题想复杂了,之前的想法是 文件名保持不变进行复制,然后更名,看了你的代码后,才想起来,复制时就可以直接更名了。是我基本功太差了,感谢!
作者: qixiaobin0715    时间: 2021-7-13 21:06

回复 13# llqcnw
不需要去掉目录并且也不能去掉目录啊,试试这个,如果存在d:\Fwkp\Bin\3.txt的话:
copy d:\Fwkp\Bin\3.txt d:\test.txt
作者: llqcnw    时间: 2021-7-13 21:07

回复 14# qixiaobin0715


    明白了,谢谢!   

另外 还是想问一下  delims=|   是什么意思?
作者: qixiaobin0715    时间: 2021-7-13 21:19

回复 15# llqcnw
自己体会一下:
  1. @echo off
  2. for /f "tokens=1-3 delims=|" %%i in ("abc|123|bcd") do (
  3.     echo,%%i
  4.     echo,%%j
  5.     echo,%%k
  6. )
  7. pause
复制代码

作者: llqcnw    时间: 2021-7-13 21:27

回复 16# qixiaobin0715


    这段代码我能看懂,因为 代码里三个字符串是用 | 分隔的,所以 delims=|  我能理解,   但是我的 1.txt  里的字符串里面都没有 |      所以我不理解  delims=|  是什么用处
作者: qixiaobin0715    时间: 2021-7-13 21:41

本帖最后由 qixiaobin0715 于 2021-7-13 21:47 编辑

回复 17# llqcnw
可以说基本没什么用,就是因为文本中不含字符|,才有一点用处,可防止路径中含有空格而默认在此处分隔,但使用"delims="更好。
体会下面2组代码
  1. @echo off
  2. for /f "delims=|" %%i in ("abc 123 bcd") do echo,%%i
  3. pause
复制代码
  1. @echo off
  2. for /f %%i in ("abc 123 bcd") do echo,%%i
  3. pause
复制代码

作者: llqcnw    时间: 2021-7-13 21:43

回复 18# qixiaobin0715


    明白了,谢谢!
作者: newswan    时间: 2021-7-13 23:03

  1. for /f "tokens=*"  %%a in (1.txt) do (
  2.     echo "%%a"
  3. )
复制代码





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