it-swarm-ja.com

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" 。mp

ファイル名が重複しているか、ファイル
見つからない。

ご覧のとおり、%NUM%は3行目のファイル名に展開されていません .. ..

私は何をする必要がありますか?

更新-何が起こっているのか正確にはわかりませんが、エコーに空白のフィールドが表示されていても、これは機能しているようです

SETLOCAL EnableDelayedExpansion

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

PAUSE
1
jwzumwalt

遅延拡張を有効にする を試して、RANDOMおよびNUMで使用される%記号を!ポイントに変更してください。

SETLOCAL EnableDelayedExpansion

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

PAUSE
1
Anaksunaman

乱数がすでに選択されている場合、同じ名前のファイルはありますか?

一般的にはそうです。そのため、このような状況では、ファイルの名前を一意の名前/番号に変更するために、別の乱数を取得する必要があります。


ファイルの名前を変更するときに繰り返しの可能性を回避して、小数点以下2桁の範囲をさらに広げることをお勧めしますか?


@Echo Off & SetLocaL EnableDelayedExpansion

For /F Tokens^=* %%A In ('DIR /ON/B *.Mp3')Do Call :^) "%%~DPA" "%%~NXA"
Exit /b

:^)
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
Goto :^)

限られた英語でごめんなさい!

0
It Wasn't Me