标题: [文件操作] [已解决]批处理实现文件夹非规则排序 [打印本页]
作者: 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- @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- set "Count=1000"
- for /f "delims=" %%i in ('dir /b /ad ^| findstr "北京[0-9][0-9][0-9]冬奥会"') do (
- set "Folder=%%i"
- set "Left=!Folder:~0,2!"
- set /a Count+=1
- set "Middle=!Count:~-3!"
- set "Right=!Folder:~-3!"
- ren "%%i" "!Left!-!Middle!-!Right!"
- )
复制代码
作者: xp3000 时间: 2022-1-21 17:42
本帖最后由 xp3000 于 2022-1-21 20:54 编辑
- @echo off
- for /f "delims=" %%a in ('more +7 "%~f0"') do (
- md "%%a"
- )
- pause & exit /b
-
- :需要生成的文件夹在下面:
- 北京001冬奥会
- 北京002冬奥会
- 北京005冬奥会
- 北京007冬奥会
- 北京009冬奥会
- 北京011冬奥会
- 北京013冬奥会
- 北京020冬奥会
- 北京021冬奥会
- 北京088冬奥会
复制代码
- @if(0)==(0) echo off&setlocal enabledelayedexpansion
- set n=1000
- @for /f "delims=" %%i in ('dir /a:d /b^|cscript -nologo -e:jscript "%~f0"') do (
- set /a n+=1&set str=!n:~-3!&REN "%%i" "北京!str!冬奥会"
- )
- pause & exit /b
- @end
- 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.所有文件夹名结构应当相似,顺序号数字个数相同且不能存在没有顺序号的文件夹名。- @echo off
- set n=1000
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /ad') do (
- set /a n+=1
- for /f "tokens=1* delims=0123456789" %%i in ("%%a") do ren "%%a" "%%i!n:~-3!%%j"
- )
复制代码
代码未经测试。
作者: 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://bathome.net./) |
Powered by Discuz! 7.2 |