回复 1# 墨者革离
1. 文件无编号的,随机打乱,并添加4位序号- -- 重命名
- [1/6]分开旅行 -> 0001.分开旅行
- [2/6]嘀答 -> 0002.嘀答
- [3/6]范玮琪 - 我们的纪念日 -> 0003.范玮琪 - 我们的纪念日
- [4/6]多少 -> 0004.多少
- [5/6]蝶恋 -> 0005.蝶恋
- [6/6]范玮琪 - 我们可不可以不勇敢 -> 0006.范玮琪 - 我们可不可以不勇敢
- -- 完成
复制代码 2. 文件已编号,重新随机编号- -- 重命名
- [1/6]0002.范玮琪 - 我们可不可以不勇敢 -> 0001.范玮琪 - 我们可不可以不勇敢
- [2/6]0005.分开旅行 -> 0002.分开旅行
- [3/6]0006.范玮琪 - 我们的纪念日 -> 0003.范玮琪 - 我们的纪念日
- [4/6]0003.多少 -> 0004.多少
- [5/6]0004.嘀答 -> 0005.嘀答
- [6/6]0001.蝶恋 -> 0006.蝶恋
- -- 完成
复制代码 3. 已编号的文件,可以取消编号- -- 随机重命名完成!是否需要取消随机序号?[Y/N] y
- 0001.范玮琪 - 我们可不可以不勇敢 -> 范玮琪 - 我们可不可以不勇敢
- 0002.分开旅行 -> 分开旅行
- 0003.范玮琪 - 我们的纪念日 -> 范玮琪 - 我们的纪念日
- 0004.多少 -> 多少
- 0005.嘀答 -> 嘀答
- 0006.蝶恋 -> 蝶恋
- -- 完成
复制代码 代码如下:- @echo off
- title 文件随机排序 By Yu2n@qq.com
-
- :_get_input
- set "strPath=V:\mp3\*.mp3"
- set/p "strPath=请输入文件夹路径,支持通配符,如(%strPath%):"
- if not defined strPath goto :_get_input
- set "strPath=%strPath:"=%"
- if "%strPath:~-1%" equ "\" set "strPath=%strPath:~0,-1%"
- if not exist "%strPath%" goto :_get_input
-
- REM 启用延迟环境变量扩展
- setlocal enabledelayedexpansion
-
- :: 统计个数
- echo -- 统计个数
- call :_get_count
- echo -- 总计 %nCount% 个文件
- echo.
-
- :: 生成随机变量 $n$
- echo -- 生成随机变量 $n$,映射随机变量与路径对应关系
- for /l %%i in (1,1,%nCount%) do (
- call :_rnd %%i
- )
- echo -- 完成
- echo.
-
- echo -- 重命名
- for /l %%i in (1,1,%nCount%) do (
- REM 从随机变量中读取值
- for /f "delims=??" %%j in ('echo,"!$%%i$!"') do (call :_rename "!#%%~j#!" "%%i")
- )
- echo -- 完成
- echo.
-
- set/p p=-- 随机重命名完成!是否需要取消随机序号?[Y/N]
- if /i "%p:~0,1%" equ "y" (
- call :_re_rename
- echo -- 完成
- pause
- )
-
- goto :eof
-
-
- :_rename
- for /f "delims=??" %%i in ('echo,"%~1"') do (
- set "fn1=%~n1"
- for /f "tokens=1,* delims=." %%j in ('echo,"%~n1"') do (
- set/a "sn=%%~j"
- REM 排除多个点号
- if !sn! neq 0 set "fn1=%%~k"
- )
- REM 4 位序号
- set sn=0000%~2
- set sn=!sn:~-4!
- echo [%~2/%nCount%]%~n1 -^> !sn!.!fn1!
- rename "%~1" "!sn!.!fn1!%~x1"
- )
- goto :eof
-
-
- :: 取消随机序号
- :_re_rename
- for /f "delims=??" %%i in ('dir /a-d /b /s "%strPath%"') do (
- for /f "tokens=1,* delims=." %%j in ('echo,"%%~ni"') do (
- set/a "sn=%%~j"
- if !sn! neq 0 (
- echo %%~ni -^> %%~k
- rename "%%~i" "%%~k%%~xi"
- )
- )
- )
- goto :eof
-
-
- :: 统计个数,生成升序变量 #n#
- goto :eof
- :_get_count
- set/a nCount=0
- for /f "delims=??" %%i in ('dir /a-d /b /s "%strPath%"') do (
- set/a nCount=!nCount! + 1
- REM add env
- set "#!nCount!#=%%~i"
- echo !nCount!. %%~i
- )
- goto :eof
-
-
- :: 生成随机变量 $n$
- goto :eof
- :_rnd
- set/a min=1
- set/a max=%nCount%
- set/a num=(%random%) %% (%max% - %min% + 1) + %min%
- if defined $%num%$ goto :_rnd
- REM add env ##
- set $%num%$=%1
- goto :eof
复制代码
|