标题: [文件操作] 批处理文件重命名为原文件名末尾最后几位字符 [打印本页]
作者: bsthq 时间: 2009-2-13 17:33 标题: 批处理文件重命名为原文件名末尾最后几位字符
我文件内有一批文件。
如abc02.xls
abc03.xls
abc04.xls
abc05.xls
abc06.xls
abc07.xls
.......
想修改成只保留文件名后两位,产生如下的文件:
02.xls
03.xls
04.xls
05.xls
06.xls
07.xls
......
现在的问题是由于数据生成的原因,有时候会出现原文件名不连续的现象,也就是abc03.xls或abc06.xls文件有可能并不存在,而我只想依据原文件名产生文件名后两位的文件,不知道该如何实现。谢谢各位老师帮我解决一下。
作者: namejm 时间: 2009-2-13 17:40
只是把文件名保留后两位吗?如果文件名不连续是否需要做什么修改?会不会出现重名文件?如果有重名文件出现,又如何处理?
如果只是保留文件名后两位而不考虑其他情况的话,事情就会很好办了。
作者: tireless 时间: 2009-2-13 18:41
如果文件名只由数字和英文组成,如果只含两个数字:- @echo off
- for /f "delims=abcdefghijklmnopqrstuvwxyz." %%a in ('dir/b *.xls') do (
- ren *%%a.xls %%a.xls
- )
复制代码
作者: bsthq 时间: 2009-2-13 22:30
尘土飞扬老师:
原来文件生成的编码规则:如aaacs1090101.xls,其编码规则是前三位表示单位代码,第四至第六位为报表名称,第七、八位表示年份,第九、十位表示月份,第十一、十二位表示日期。现在我想根据原已经生成的文件名,重新生成只保留第十一、十二位日期的文件,也就是生成01.xls文件.
只要保留文件名后两位的数字,重名文件不会出现.
tieless老师的代码,我试了试,没有成功.主要是我对批处理的理解能力有限,还希望老师能解释一下代码运行的原理.谢谢老师了.
作者: namejm 时间: 2009-2-13 22:45
试试这个代码:
思路:获取当前目录下的所有.xls文件,通过字符截取,只保留最后6个字符即可(保留两位文件名+4位后缀名)- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /a-d /b *.xls') do (
- set "name=%%i"
- ren "!name!" "!name:~-6!"
- )
- pause
复制代码
作者: bsthq 时间: 2009-2-13 22:58
谢谢老师,代码试验成功了.如果可以的话,老师能对代码解释一下,实现的过程.谢谢!
作者: Batcher 时间: 2009-2-13 23:06 标题: 回复 6楼 的帖子
哪句不懂,就问哪句,有很多热心人会告诉你答案;如果全部不懂,建议先去教学区学习基础教程,这样才能更快的掌握批处理。
作者: bsthq 时间: 2009-2-13 23:08
dir /a-d 这一句有什么作用呀
作者: Batcher 时间: 2009-2-13 23:26 标题: 回复 8楼 的帖子
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\test>dir /?
显示目录中的文件和子目录列表。
DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]
[drive:][path][filename]
指定要列出的驱动器、目录和/或文件。
/A 显示具有指定属性的文件。
attributes D 目录 R 只读文件
H 隐藏文件 A 准备存档的文件
S 系统文件 - 表示“否”的前缀
/B 使用空格式(没有标题信息或摘要)。
/C 在文件大小中显示千位数分隔符。这是默认值。用 /-C 来
停用分隔符显示。
/D 跟宽式相同,但文件是按栏分类列出的。
/L 用小写。
/N 新的长列表格式,其中文件名在最右边。
/O 用分类顺序列出文件。
sortorder N 按名称(字母顺序) S 按大小(从小到大)
E 按扩展名(字母顺序) D 按日期/时间(从先到后)
G 组目录优先 - 颠倒顺序的前缀
/P 在每个信息屏幕后暂停。
/Q 显示文件所有者。
/S 显示指定目录和所有子目录中的文件。
/T 控制显示或用来分类的时间字符域。
timefield C 创建时间
A 上次访问时间
W 上次写入的时间
/W 用宽列表格式。
/X 显示为非 8dot3 文件名产生的短名称。格式是 /N 的格式,
短名称插在长名称前面。如果没有短名称,在其位置则
显示空白。
/4 用四位数字显示年
可以在 DIRCMD 环境变量中预先设定开关。通过添加前缀 - (破折号)
来替代预先设定的开关。例如,/-W。
dir /a-d的意思就是只显示文件,不显示文件夹。
作者: cmbatd 时间: 2009-2-16 21:21
" /B 使用空格式(没有标题信息或摘要)。"
"没有标题信息或摘要"是什么意思啊?
作者: wxcute 时间: 2009-2-16 21:25 标题: 回复 10楼 的帖子
参阅:http://bbs.bathome.net/viewthrea ... amp;page=1#pid19400
指只列文件名,没有修改时间及所在目录等信息。
作者: cmbatd 时间: 2009-2-16 21:26
/B 使用空格式(没有标题信息或摘要)。括号里的是什么意思啊?最好举例...
作者: 随风 时间: 2009-2-16 21:26
这个问题你直接使用 dir /b 和 dir 不带 /b 参数试试不就知道了。
作者: 810126769 时间: 2013-8-23 16:04
非常好的代码!学习了!知道怎么取变量中的最后6个字符了!!name:~-6!
太强了!
作者: yihuii 时间: 2022-10-22 05:47
回复 5# namejm
大神真牛*,顶礼膜拜
作者: hujiuxi 时间: 2023-2-14 20:50
回复 5# namejm
如果是重命名 含有 工资表字样的文件呢?
原文件名 512某某学校--2023年2月份工资表.xlsx
需要重命名为 工资表.xlsx
该如何写?
改成下面这样,提示找不到文件
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /a-d /b *工资表.xlsx') do (
set "name=%%i"
ren "!name!" "!name:~-6!"
)
pause
作者: 77七 时间: 2023-2-14 22:38
本帖最后由 77七 于 2023-2-14 22:41 编辑
回复 16# hujiuxi
批处理代码保持为ansi编码格式
把批处理和需要修改文件名的文件放在同一目录下。如果文件名不含"!",代码是可以处理的,保留几位自己修改一下
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |