找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 40241|回复: 11

[文件操作] [已解决]批处理排序重命名文件

[复制链接]
发表于 2014-9-8 07:34:23 | 显示全部楼层 |阅读模式
本帖最后由 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能实现吗?  应该怎么写呢?
发表于 2014-9-8 10:59:21 | 显示全部楼层
  1. dir /b *.txt
复制代码
 楼主| 发表于 2014-9-8 12:23:31 | 显示全部楼层
回复 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  能实现吗
发表于 2014-9-8 13:28:56 | 显示全部楼层
回复 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
复制代码
发表于 2014-9-8 14:35:41 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2014-9-8 15:44:42 | 显示全部楼层
回复 4# yu2n
先谢谢你!
这个排序 应该是属于字符排序
 楼主| 发表于 2014-9-8 17:15:26 | 显示全部楼层
回复 5# apang
成功解决了问题  谢谢你  通过你写的BAT  让我又学到了新知识
发表于 2014-9-9 11:06:49 | 显示全部楼层
回复 5# apang

代码能稍微解释一下么?想学习学习。
发表于 2014-9-9 15:54: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文件

评分

参与人数 1技术 +1 收起 理由
xudaweb + 1 乐于助人

查看全部评分

发表于 2014-9-11 16:12:57 | 显示全部楼层
回复 9# apang

原来如此,学到了,感谢!
发表于 2014-9-11 19:18:17 | 显示全部楼层
回复 9# apang


    个人更倾向使用临时后缀名,然后一个ren收尾…感觉暴力点会更快

评分

参与人数 1技术 +1 收起 理由
apang + 1 有道理

查看全部评分

发表于 2014-9-11 21:13:50 | 显示全部楼层
回复 11# CrLf


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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 03:29 , Processed in 0.034506 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表