Board logo

标题: [文件操作] 批处理文件重命名为原文件名末尾最后几位字符 [打印本页]

作者: 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

如果文件名只由数字和英文组成,如果只含两个数字:
  1. @echo off
  2. for /f "delims=abcdefghijklmnopqrstuvwxyz." %%a in ('dir/b *.xls') do (
  3.   ren *%%a.xls %%a.xls
  4. )
复制代码

作者: bsthq    时间: 2009-2-13 22:30

尘土飞扬老师:
原来文件生成的编码规则:如aaacs1090101.xls,其编码规则是前三位表示单位代码,第四至第六位为报表名称,第七、八位表示年份,第九、十位表示月份,第十一、十二位表示日期。现在我想根据原已经生成的文件名,重新生成只保留第十一、十二位日期的文件,也就是生成01.xls文件.

只要保留文件名后两位的数字,重名文件不会出现.

tieless老师的代码,我试了试,没有成功.主要是我对批处理的理解能力有限,还希望老师能解释一下代码运行的原理.谢谢老师了.
作者: namejm    时间: 2009-2-13 22:45

  试试这个代码:
  思路:获取当前目录下的所有.xls文件,通过字符截取,只保留最后6个字符即可(保留两位文件名+4位后缀名)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /a-d /b *.xls') do (
  4.     set "name=%%i"
  5.     ren "!name!" "!name:~-6!"
  6. )
  7. 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