在bat文件中使用win7随机编号文件

在bat文件中使用win7随机编号文件

我有一台 mp3 播放器,它有一个设计很差的硬编码随机生成器,用于随机播放歌曲。每次打开它,它都会播放相同的顺序(5-22-3-150-75-86... 等)。为了听到更多变化,我希望能够定期随机化 USB 记忆棒上的文件名并更改文件在目录列表中的位置。

我正在尝试将子目录中的所有文件名重命名为随机数。这是我一直在尝试的方法,但没有成功。出于某种原因新文件名中的 %num% 为空白

1|    for %%A in (*.mp3) DO (
2|    set /A num=%RANDOM%*100/32768+1
3|    ren "%%A" %num%.mp3
4|    )
5|    pause

(讨论过程中为清晰起见添加了行号)

每个文件的输出如下所示。

D:\music_playlists\pop-mix [25gb]>(
set /A num=13621*100/32768+1
ren "Country-132.mp3".mp3
)
存在重复的文件名,或者
找不到该文件。

正如你所看到的%NUM% 未扩展为第 3 行的文件名...

我需要做什么?

更新 - 不确定到底发生了什么,但这似乎有效,即使回声显示空白字段

SETLOCAL EnableDelayedExpansion

FOR %%A IN (*.mp3) DO (
SET  /A NUM=!RANDOM!
echo !NUM!
REN "%%A" !NUM!.mp3
)

PAUSE

答案1

尝试实现延迟扩展并将与和 一起%使用的符号更改为点:RANDOMNUM!

SETLOCAL EnableDelayedExpansion

FOR %%A IN (*.mp3) DO (
SET /A NUM=!RANDOM!*100/32768+1
REN "%%A" !NUM!.mp3
)

PAUSE

答案2


如果已经选择了随机数,是否有任何文件具有相同的名称?因此,将失败

一般来说,是的,因此在这些情况下,您将需要获取另一个随机数来使用唯一的名称/编号重命名文件。


我可以建议将小数点后两位的范围进一步扩大,从而尽量减少重命名文件时重复的可能性吗?


@echo Off && SetLocaL EnableDelayedExpansion

for /f delims^=* %%i in =;(
      'dir /on /a:-d /b "*.mp3"'
    =;) do call %:^) "%%~dpi" "%%~nxi"

endlocal && goto :eof || exit /b 0 

%:^)
for /f %%f in =;(
      'set /a _num^=!random!*1000/32768+1'
    =;) do set "_num=100%%~f"

if not exist "%~1!_num:~-4!.mp3" =;(
     ren "%~1%~2" "!_num:~-4!.mp3"
     exit /b =;) else goto %:^)

相关内容