Board logo

标题: [文件操作] [已解决]批处理实现文件夹非规则排序 [打印本页]

作者: wangjnyz    时间: 2022-1-21 16:15     标题: [已解决]批处理实现文件夹非规则排序

本帖最后由 wangjnyz 于 2022-1-22 14:17 编辑

求助唉~三脚猫功夫,在非规则排序面前毫无还手之力,只能请教各位大神了。 叩谢~

假设:有10个文件夹,名字分别如下:

北京001冬奥会
北京002冬奥会
北京005冬奥会
北京007冬奥会
北京009冬奥会
北京011冬奥会
北京013冬奥会
北京020冬奥会
北京021冬奥会
北京088冬奥会

如何使用批处理的形式修改文件夹名字实现如下排序:

北京001冬奥会
北京002冬奥会
北京003冬奥会
北京004冬奥会
北京005冬奥会
北京006冬奥会
北京007冬奥会
北京008冬奥会
北京009冬奥会
北京010冬奥会
作者: Batcher    时间: 2022-1-21 16:55

回复 1# wangjnyz


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. set "Count=1000"
  5. for /f "delims=" %%i in ('dir /b /ad ^| findstr "北京[0-9][0-9][0-9]冬奥会"') do (
  6.     set "Folder=%%i"
  7.     set "Left=!Folder:~0,2!"
  8.     set /a Count+=1
  9.     set "Middle=!Count:~-3!"
  10.     set "Right=!Folder:~-3!"
  11.     ren "%%i" "!Left!-!Middle!-!Right!"
  12. )
复制代码

作者: xp3000    时间: 2022-1-21 17:42

本帖最后由 xp3000 于 2022-1-21 20:54 编辑
  1. @echo off
  2. for /f "delims=" %%a in ('more +7 "%~f0"') do (
  3. md "%%a"
  4. )
  5. pause & exit /b
  6. :需要生成的文件夹在下面:
  7. 北京001冬奥会
  8. 北京002冬奥会
  9. 北京005冬奥会
  10. 北京007冬奥会
  11. 北京009冬奥会
  12. 北京011冬奥会
  13. 北京013冬奥会
  14. 北京020冬奥会
  15. 北京021冬奥会
  16. 北京088冬奥会
复制代码
  1. @if(0)==(0) echo off&setlocal enabledelayedexpansion
  2. set n=1000
  3. @for /f "delims=" %%i in ('dir /a:d /b^|cscript -nologo -e:jscript "%~f0"') do (
  4.     set /a n+=1&set str=!n:~-3!&REN "%%i" "北京!str!冬奥会"
  5. )
  6. pause & exit /b
  7. @end
  8. WSH.echo(WScript.StdIn.ReadAll().match(/北京[0-9]+冬奥会/g).join('\r\n'))
复制代码
删除一点快很多
作者: qixiaobin0715    时间: 2022-1-21 18:15

本帖最后由 qixiaobin0715 于 2022-1-21 19:02 编辑

代码实际上都有局限性。下面代码运行的条件:
1.所有要处理的文件夹名顺序号前不能有其它数字;
2.就像你示范中的一样,顺序号前最好字符相同;
3.所有文件夹名结构应当相似,顺序号数字个数相同且不能存在没有顺序号的文件夹名。
  1. @echo off
  2. set n=1000
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%a in ('dir /b /ad') do (
  5.     set /a n+=1
  6.     for /f "tokens=1* delims=0123456789" %%i in ("%%a") do ren "%%a" "%%i!n:~-3!%%j"
  7. )
复制代码
代码未经测试。
作者: aloha20200628    时间: 2022-1-21 21:03

@echo off & setlocal enabledelayedexpansion
set/a k=0
for /f "delims=" %%d in ('dir /b/ad ^| sort ') do (set/a k+=1 & set "n=00!k!" & set "n=!n:~-3!" & (ren "%%d" "北京!n!冬奥会"))
作者: wangjnyz    时间: 2022-1-22 12:39

回复 2# Batcher

惨了又被改了要求,版主大大的代码能适应老的规则,现在上头又下了新规则,淡淡的忧伤

假设:有10个文件夹,名字分别如下:

北京001冬奥会(滑雪)
北京002冬奥会(冰球)
北京005冬奥会(跳台)
北京007冬奥会(雪橇)
北京009冬奥会(射击)
北京011冬奥会(高台)
北京013冬奥会(溜冰)
北京020冬奥会(单人)
北京021冬奥会(双人)
北京088冬奥会(冰舞)

如何使用批处理的形式修改文件夹名字实现如下排序:

北京001冬奥会(滑雪)
北京002冬奥会(冰球)
北京003冬奥会(跳台)
北京004冬奥会(雪橇)
北京005冬奥会(射击)
北京006冬奥会(高台)
北京007冬奥会(溜冰)
北京008冬奥会(单人)
北京009冬奥会(双人)
北京010冬奥会(冰舞)
作者: wangjnyz    时间: 2022-1-22 12:41

回复 3# xp3000

谢谢老兄悉心指点,上级又改了文件名,哎,又得重新想法子喽
作者: wangjnyz    时间: 2022-1-22 12:42

回复 4# qixiaobin0715


   

新的文件名,难度提升了不止一点半点
作者: wangjnyz    时间: 2022-1-22 12:43

回复 5# aloha20200628


    惨了,被上级团团转囧囧
作者: wangjnyz    时间: 2022-1-22 13:04

回复 2# Batcher
感觉是我表达的不清晰,哎自己好无用啊。 :'( :'(


其实,只要是数字按001,002这样排了顺序就可以。比如:文件夹本来排第一个“北京003冬奥会(跳台)”,批处理后变成“北京009冬奥会(跳台)”也无妨, 只要是001,002。。。010这些按顺序就可以啦。



假设:有10个文件夹,名字分别如下:

北京001冬奥会(滑雪)
北京002冬奥会(冰球)
北京005冬奥会(跳台)
北京007冬奥会(雪橇)
北京009冬奥会(射击)
北京011冬奥会(高台)
北京013冬奥会(溜冰)
北京020冬奥会(单人)
北京021冬奥会(双人)
北京088冬奥会(冰舞)


形象点说,最后文件夹名字实现如下排序也可以的:


北京001冬奥会(单人)
北京002冬奥会(冰舞)
北京003冬奥会(高台)
北京004冬奥会(射击)
北京005冬奥会(雪橇)
北京006冬奥会(跳台)
北京007冬奥会(溜冰)
北京008冬奥会(滑雪)
北京009冬奥会(双人)
北京010冬奥会(冰球)
作者: qixiaobin0715    时间: 2022-1-22 13:38

回复 8# wangjnyz
4楼代码运行有什么问题吗?
作者: wangjnyz    时间: 2022-1-22 14:17

回复 11# qixiaobin0715 我的天啊,像变魔术一样。兄台,你可是真神了啊,顶礼膜拜。咱这个论坛真是藏龙卧虎,热心的大神,非常感谢,好人一生平安,GOD BLESS you. :handshake :handshake
作者: Batcher    时间: 2022-1-22 20:15

回复 10# wangjnyz


2楼代码第10行改成这样就能同时满足老需要和新需求:
    set "Right=!Folder:~5!"
作者: xp3000    时间: 2022-1-23 15:21

我那个要弄要二次提取就又慢了,5楼刚好适合
作者: wangjnyz    时间: 2022-1-23 22:17

回复 14# xp3000


    有道理,大家都很厉害啊~佩服
作者: wangjnyz    时间: 2022-1-23 22:17

回复 13# Batcher


    好的,谢谢版主,好人一生平安~




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