标题: [文件操作] 批处理for命令delims切片后的文件问题 [打印本页]
作者: sssony 时间: 2015-9-9 14:47 标题: 批处理for命令delims切片后的文件问题
目的是把:比如:SHFX-1-2 XXXX001,改成SHFX-1-2-001。以上XXXX是汉字加标点符号。- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1-5 delims=0, " %%i in ('dir /a-d /b *.pdf') do (
- ren "%%i%%j%%k" "%%i-%%k"
- )
- 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 编辑
最好贴完整文件名,一个文件没有代表性- ::以SHFX-1-2 XXXX001.pdf为例
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims= " %%a in ('dir /a-d /b *.pdf') do (
- set str=%%b
- set str=!str:~4!
- ren "%%a %%b" "%%a-!str!"
- )
复制代码
作者: 回家路上 时间: 2015-9-9 15:16
本帖最后由 回家路上 于 2015-9-9 17:13 编辑
- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /a-d /b *.pdf') do (
- for /f "tokens=1,2 delims= " %%a in ("%%i") do (
- set suf=%%~nb
- for /f "delims=0123456789" %%m in ("!suf!") do set hanzi=%%m
- for /f "delims=" %%m in ("!hanzi!") do set newname=%%a-!suf:%%m=!
- )
- ren "%%~nxi" "!newname!.pdf"
- )
- 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
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%d in ('dir /a-d /b *.pdf') do (
- for /f "tokens=1,2 delims=. " %%a in ("%%d") do (
- set str=%%b
- set str=!str:~-3!
- for /f "delims=1234567890" %%i in ("!str!") do if "%%i" neq "" set str=!str:~-2!
- ren "%%d" "%%a-!str!.pdf"
- )
- )
- pause
复制代码
作者: sssony 时间: 2015-9-9 16:58
回复 13# flyinnet9
感谢。可以用。谢谢
作者: pcl_test 时间: 2015-9-9 18:23
第三方- ::先下载http://batch-cn.qiniudn.com/tool/ren2.exe
- @ren2 -f "(\S+)(\D+)(\d+\.[pP][dD][fF])" "$1-$3"
- @pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |