📄 乱序重列某类文件.bat
字号:
@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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -