とりあえず、mp3 のシャッフルしか用途が思いつかないですが・・・。ま、何かに使えるでしょう。
?%%j==? の ? は、空白文字列の判断用で、ファイル名に使え無い文字を使っています。( %%j は、ファイル名なので )。別に "%%j"=="" でもいいのですが、"%%j"=="" の "" は言語的なものでは無いという事を忘れないようにというメモ的な意味もあります
@echo off REM ****************************** REM シャッフルバッチ REM 区切り文字が @ の場合 REM sf *@*.* @ REM ------------------------------ REM 使用例 : sf *.mp3 @ REM 削除 : sf *.mp3 @ RESET REM ****************************** for /f "tokens=1,2* delims=%2" %%i in ( 'dir /b %1' ) do ( if ?%%j==? (call :random_ren_first "%%i" %2) else (call :random_ren "%%i%2%%j" "%%j" %2 %3) ) goto end :random_ren_first ren %1 %RANDOM%%2%1 exit /b :random_ren if "%4"=="RESET" (ren %1 %2) else (ren %1 %RANDOM%%3%2) exit /b :end
for /f の意味 in ( 文字列 ) の、文字列が ' で挟まれている場合は、その中のコマンドの結果が対象。 in ( 文字列 ) の、文字列が " で挟まれている場合は、" に挟まれた文字列が対象 in ( 文字列 ) の、文字列が 普通の文字列の場合は、該当するファイルを探してその内容を対象( ファイル名は、スペースやカンマで繋げて複数のファイルを対象にできる ) for 内で繰り返される内容 /f の後のオプションが無ければ、対象を行単位で取り込んで、スペースまたはタブで区切った先頭の文字列を取得して %%i にセットする。 ここでは、"tokens=1,2* delims=%2" というオプションがセットされているので、%%i に一番目のトークンをセットし、%%j ( 暗黙で以降の変数はアルファベット順 ) に2番目以降全ての文字列がセットされます(*がなければ、2番目のみ)。その際の区切り文字として、delims= の右辺が使用されるので、ここではバッチファイルに渡される2番目の引数を使います。( サンプルとしては、ここでは @ という文字を想定しています ) つまり、実行結果が以下のように処理されます。abc.txt の場合、%%i が abc.txt で、%%j が 空文字 123@abc.txt の場合、%%i が 123 で、%%j が abc.txtif ?%%j==? の意味は %%j が空文字になると、? == ? という比較になるので、一致する事になります。ですから、%%j に何か入っておれば、 else の処理で、それは元々の文字列に @ が含まれているという事で、一度シャッフル済みだという事になります。 %%j が空文字の場合は、初めての処理になるので :random_ren_first へジャンプして ランダム数値@元のファイル名というフォーマットに変更します。このフォーマットを守れば、バッチファイルの第3引数に RESET を指定すると元のファイル名に戻す事ができます。
|
【コマンド : バッチファイルの最新記事】
- バッチファイル内で、実行中のファイルと引数のファイルを扱う特殊変数
- バッチファイル(コマンドプロンプト)で使用できる特殊な3つの環境変数
- バッチファイル内で、コマンドプロンプトが管理者権限で実行されているかのチェック
- デスクトップのアイコン表示を切り替えるバッチファイル
- バッチファイルで、二つのファイルが同じファイルかどうかチェックして if errorlevel で処理を分岐する
- バッチファイル内の Call コマンドによるサブルーチンの呼び出し( errorlevel を戻して if で判断する )
- あらかじめ指定しておいたフォルダの中を探して Excel のドキュメントを開くバッチファイル
- バッチファイル自身をフルパスで展開する変数 : %~f0
- コマンドプロンプト : 指定回数だけループ処理を行うバッチファイル
- SET /P : バッチファイルで入力した値を環境変数に設定して使用する
- バッチファイル : コマンドプロンプトの表示幅の変更
- バッチファイル : VS9.0のMicrosoft純正バッチ処理 : For /F : バッチファイルでレジストリの値を判断材料にする
- コマンドプロンプト : バッチファイルで使う for コマンドの変数展開のテスト( vtest.bat )
- バッチファイルで、FOR に渡すパラメータの妥当性チェックを行う
- バッチファイルで、ファイルの中の行を指定してその行の文字列を実行する