Board logo

标题: [文件操作] 批处理for命令delims切片后的文件问题 [打印本页]

作者: sssony    时间: 2015-9-9 14:47     标题: 批处理for命令delims切片后的文件问题

目的是把:比如:SHFX-1-2 XXXX001,改成SHFX-1-2-001。以上XXXX是汉字加标点符号。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1-5 delims=0, " %%i in ('dir /a-d /b *.pdf') do (
  4. ren "%%i%%j%%k" "%%i-%%k"
  5. )
  6. pause
复制代码
以上是修改文件名。但现在碰到一个问题。做为分割用的字符,在文件名中,不是单独的。  用delims分割后。"%%i%%j%%k" 得到的文件名是SHFX-1-2a1.得不到完整的文件全名,没办法修改文件名。因空格不一定是1个。有可能两个或三个。0也是一样。但经过DELIMS这两个字符只要是连在一起的。当做一个直接被切掉了。我哪怕手工在:"%%i%%j%%k" 中修改为:"%%i %%j0%%k"也不行。 怎么能得到完整的文件名来做修改?
作者: flyinnet9    时间: 2015-9-9 15:09

本帖最后由 flyinnet9 于 2015-9-9 15:12 编辑

最好贴完整文件名,一个文件没有代表性
  1. ::以SHFX-1-2 XXXX001.pdf为例
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. for /f "tokens=1,2 delims= " %%a in ('dir /a-d /b *.pdf') do (
  5.   set str=%%b
  6.   set str=!str:~4!
  7.   ren "%%a %%b" "%%a-!str!"
  8. )
复制代码

作者: 回家路上    时间: 2015-9-9 15:16

本帖最后由 回家路上 于 2015-9-9 17:13 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /a-d /b *.pdf') do (
  3. for /f "tokens=1,2 delims= " %%a in ("%%i") do (
  4. set suf=%%~nb
  5. for /f "delims=0123456789" %%m in ("!suf!") do set hanzi=%%m
  6. for /f "delims=" %%m in ("!hanzi!") do set newname=%%a-!suf:%%m=!
  7. )
  8. ren "%%~nxi" "!newname!.pdf"
  9. )
  10. pause
复制代码

作者: sssony    时间: 2015-9-9 15:34

回复 2# flyinnet9


    文件名。几乎都是一样的格式。XXXX这些文字不一样。前后格式几乎是一样的。
作者: flyinnet9    时间: 2015-9-9 15:37

回复 4# sssony


    2、3楼都能满足你要求,如果XXXX有特殊字符或不止4位,用3楼的
作者: sssony    时间: 2015-9-9 15:42

回复 2# flyinnet9


    修改失败,前面没动。后面变成.pdf-~4-~4
作者: sssony    时间: 2015-9-9 15:43

回复 3# 回家路上


    不能修改。提示命令语法不正确
作者: sssony    时间: 2015-9-9 15:45

其实我要的东西很简单啊。有没有哪个命令可以读取当前文件名。我现在碰到的最大的问题是,被切片后。几个碎片拼起来。得不到原来的文件名。自然没有办法用REN修改文件名了。
作者: flyinnet9    时间: 2015-9-9 15:51

本帖最后由 flyinnet9 于 2015-9-9 15:53 编辑

贴完整真实的文件名,不要XXXX的
作者: sssony    时间: 2015-9-9 16:00

回复 9# flyinnet9
    FX-1-1    可行性研究报告、审查请示、会议纪要及项目前期出入口设置001
    FX-1-1    可行性研究报告、审查请示、会议纪要及项目前期出入口设置002
    FX-1-1    可行性研究报告、审查请示、会议纪要及项目前期出入口设置003
    FX-1-2         工程可行性研究报告及其批复、请示及意见函01
    FX-1-10    地震安全评价及地震安全性评价报告02


以上所有的修改要求都只有一个。把中间的汉字部份去掉。就是把前面的“空格”开始,到后面“01”中间这段的内容删掉。前后再拼到一起。修改后的是这样:
FX-1-1-001
FX-1-1-002
FX-1-1-003
FX-1-2-01
FX-1-10-02
作者: 回家路上    时间: 2015-9-9 16:34

本帖最后由 回家路上 于 2015-9-9 17:13 编辑

回复 8# sssony


原来的文件名,就用我的方式,不动它,另起一个变量进行分割解析就行了。
作者: sssony    时间: 2015-9-9 16:46

回复 11# 回家路上


    试了一下。不行啊。%%~fi,显示完整的路径名。但文件名显示还是不正常。FI,FJ,FK这样拼一起是错的。每个都显示路径名。我试过用NXI,NXJ,NXK几个拼一起。还是缺少了切片的符号。。。如果那些分割符都只有1个。我可以手动用%%i"   "%%j"00"%%k的方式来拼。但空格与0的数量不是固定。有的只有一个空格 ,有的只有1个0
作者: flyinnet9    时间: 2015-9-9 16:53

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%d in ('dir /a-d /b *.pdf') do (
  4.   for /f "tokens=1,2 delims=. " %%a in ("%%d") do (
  5.     set str=%%b
  6.     set str=!str:~-3!
  7.     for /f "delims=1234567890" %%i in ("!str!") do if "%%i" neq "" set str=!str:~-2!
  8.     ren "%%d" "%%a-!str!.pdf"
  9.   )
  10. )
  11. pause
复制代码

作者: sssony    时间: 2015-9-9 16:58

回复 13# flyinnet9


    感谢。可以用。谢谢
作者: pcl_test    时间: 2015-9-9 18:23

第三方
  1. ::先下载http://batch-cn.qiniudn.com/tool/ren2.exe
  2. @ren2 -f "(\S+)(\D+)(\d+\.[pP][dD][fF])" "$1-$3"
  3. @pause
复制代码





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