乱序重列某类文件.bat

来自「namejm写的批处理」· Batch 代码 · 共 46 行

BAT
46
字号
@echo off
:: 把mp3乱序重列
:: 速度飞快
:: 主要思路:先把所有的mp3文件名用dir罗列出来,并在每个文件名前加上%random%随机数,
::           用冒号分隔。然后用sort对新文件名排序,最后用for语句取出原文件名
:: code by 无奈何 CMD@XP 2006-7-27
copy nul List.txt >NUL
if "%1" NEQ "$" (
        for /f "tokens=1,2 delims=:" %%a in ('"%~0" $^|sort') do @echo %%b>>List.txt
) else for /f "delims=" %%i in ('dir /b /a-d *.mp3') do @call :sub %%i
goto :EOF

:sub
echo %random%:%*
goto :EOF

另外两种精简方案:

1、
@echo off
setlocal enabledelayedexpansion
copy nul List.txt >NUL
if "%1" NEQ "$" (
    for /f "tokens=1,2 delims=:" %%a in ('"%~0" $^|sort') do echo %%b>>List.txt
) else for /f "delims=" %%i in ('dir /b /a-d *.mp3') do echo !random!:%%i 
exit

2、
@echo off
:: 当文件名为1.mp3、2.mp3等形式的时候,会发生错误,
:: 原因是i被多次转义了,修正是去掉两个%%,同时改用
:: 两个%%random%%,从而得出2的修正版2-1.
copy nul List.txt >NUL
if "%1" NEQ "$" (
    for /f "tokens=1,2 delims=:" %%a in ('"%~0" $^|sort') do echo %%b>>List.txt
) else for /f "delims=" %%i in ('dir /b /a-d *.mp3') do call echo %%random%%:%%%%i
exit

2-1、
解决2中文件名为1.mp3、2.mp3等简单数字会出错的问题
@echo off
copy nul List.txt >NUL
if "%1" NEQ "$" (
    for /f "tokens=1,2 delims=:" %%a in ('"%~0" $^|sort') do echo %%b>>List.txt
) else for /f "delims=" %%i in ('dir /b /a-d *.mp3') do call echo %%random%%%%random%%:%%i
exit

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?