批处理 随机排序并命名文件序号

当前文件夹下,有50个各式名称的文件:1.啊扽.txt2.Buio.txt3.曾贺觥所东啊撒txt4.Duiopo.txt5.呃瓦尔特.txt……而我所需要的,就是将这50个文件重新命名成序号文件:1.txt,2.txt,3.txt……但是有个要求,就是这些文件的排序,不能是原来文件排序,要彻底打乱原先的文件序号。
2026年09月26日 18:37
有2个网友回答
网友(1):

给你一个例子:批处理怎样在原文件名中插入随机序号?如下:
批处理放要处理的文件夹运行,编号形式为三位数加下划线接原文件名
请确定文件总数不要超,代码第一行的1000中0的个数决定编号位数可自己改
如果已有这种形式mp4文件会先去掉原编号
编号总是从001开始顺序编号但对应的mp4文件是随机的
无论有无新文件加入,每运行一次会重排一次
@echo off&cd/d %~dp0&set/a n=1000
setlocal enabledelayedexpansion
for /f "tokens=1* delims=_" %%i in (
'dir/b/a-d *.mp4^|findstr/b "[0-9][0-9]*_"')do ren "%%i_%%j" "%%j"
for %%i in (*.mp4)do set "#!random!=%%i"
for /f "tokens=1* delims==" %%i in ('set #')do (
set/a n+=1
echo !n:~1!_%%j
ren "%%j" "!n:~1!_%%j"
)
set/p=按任意键退出... <>nul

网友(2):

@echo off
cd /d %~dp0
setlocal enabledelayedexpansion

del "%tmp%\list_*.log"
(for %%a in (*.txt) do (
    set /a num+=1
    echo ^|!num!^|"%%~a"
))>"%tmp%\list_old.log"

:Loop
if !count! equ !num! goto End
set /a line=!random!%%!num!+1
ping 127.0.0.1 -n "1">nul
echo "!okline!," | find ",!line!," >nul && goto loop
findstr "^|!line!|" "%tmp%\list_old.log">>"%tmp%\list_new.log"
findstr /v "^|!line!|" "%tmp%\list_old.log">"%tmp%\list_tmp.log"
move "%tmp%\list_tmp.log" "%tmp%\list_old.log" >nul
set okline=!okline!,!line!
set /a count+=1
goto Loop

:End
for /f "tokens=2 delims=|" %%a in ('type "%tmp%\list_new.log"') do (
    set /a txtnum+=1
    ren "%%~a" !txtnum!.txt
)
pause