Board logo

标题: [文件操作] [已解决]批处理排序重命名文件 [打印本页]

作者: g99    时间: 2014-9-8 07:34     标题: [已解决]批处理排序重命名文件

本帖最后由 g99 于 2014-9-8 17:16 编辑

一个文件夹内有100个txt文件,1.txt 2.txt  3.txt …… 98.txt 99.txt 100.txt  现在想把他们排序  排成1.txt  11.txt  12.txt  …… 按字符排序    这个BAT能实现吗?  应该怎么写呢?
作者: Batcher    时间: 2014-9-8 10:59

  1. dir /b *.txt
复制代码

作者: g99    时间: 2014-9-8 12:23

回复 2# Batcher
如果想把文件重命名
1.txt改成  1.txt
2.txt改成   11.txt
3.txt改成   12.txt
4.txt改成   13.txt
……
……
9.txt改成   19.txt
10.txt改成  2.txt
11.txt改成  21.txt
……
……

用for 循环加dir  能实现吗
作者: yu2n    时间: 2014-9-8 13:28

回复 3# g99
我实在看不出来它是一个序列,能用公式算出来吗?

如果是无序的,为什么不直接写一百行:
  1. set strPath=D:\一个文件夹
  2. pushd  "%strPath%"
  3. rename 1.txt   1.txt
  4. rename 2.tx    11.txt
  5. rename 3.txt   12.txt
  6. rename 4.txt   13.txt
  7. rem ……
  8. rem ……
  9. rename 9.txt   19.txt
  10. rename 10.txt  2.txt
  11. rename 11.txt  21.txt
  12. popd
复制代码

作者: apang    时间: 2014-9-8 14:35

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b /on^|findstr /ibe [1-9][0-9]*\.txt') do (
  3.         set /a n+=1
  4.         ren "!n!.txt" "_%%a"
  5. )
  6. for /f "delims=_" %%a in ('dir /b^|findstr /ibe _[1-9][0-9]*\.txt') do (
  7.         ren "_%%a" "%%a"
  8. )
  9. pause
复制代码

作者: g99    时间: 2014-9-8 15:44

回复 4# yu2n
先谢谢你!
这个排序 应该是属于字符排序
作者: g99    时间: 2014-9-8 17:15

回复 5# apang
成功解决了问题  谢谢你  通过你写的BAT  让我又学到了新知识
作者: xudaweb    时间: 2014-9-9 11:06

回复 5# apang

代码能稍微解释一下么?想学习学习。
作者: apang    时间: 2014-9-9 15:54

回复 8# xudaweb


假设有20个txt文本,dir /b /on *.txt的结果为:
1.txt、10.txt、11.txt、12.txt、13.txt、14.txt、15.txt、16.txt、17.txt、18.txt、19.txt、2.txt、20.txt、3.txt、4.txt、5.txt、6.txt、7.txt、8.txt、9.txt

第一个for循环是将1.txt重命名为_1.txt,2.txt重命名为_10.txt,3.txt重命名为_11.txt,... 20.txt重命名为_9.txt
第二个for循环是将前面得到的 _1.txt、_2.txt、_3.txt、_4.txt、... _20.txt 中的“_”字符去掉
如果第一个for循环重命名时不加“_”字符的话,会因为目标文件已存在而导致重命名失败。所以用“_”字符过渡,重命名了两次
findstr /ibe [1-9][0-9]*\.txt是筛选文件名为数字(大于等于1的整数)的所有txt文件
作者: xudaweb    时间: 2014-9-11 16:12

回复 9# apang

原来如此,学到了,感谢!
作者: CrLf    时间: 2014-9-11 19:18

回复 9# apang


    个人更倾向使用临时后缀名,然后一个ren收尾…感觉暴力点会更快
作者: apang    时间: 2014-9-11 21:13

回复 11# CrLf


    “_”放在文件名前面确实不严谨,如果名为_1.txt的文件原本就存在,重命名时仍然会失败
放到文件名后面是个好办法,形如1.txt_,2.txt_,重命名时可以用通配符了,我怎么没想到?




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