一部のWindowsバッチの第一人者が、コードのクリーンアップを喜んで手伝ってくれるとありがたいです。 .batは機能していますが、実装が面倒です。2つの点でよりシンプルでクリーンなものにしたいと思います。
1-上記の行の「コピー」を完了するために「sleep1s」を入れました。そうでない場合、「for()」はプログラムの残りの部分とマルチタスクで実行されているようです。
2-毎回ファイル名を再リストするのではなく、配列を使用してファイル名を保存したいと思います!
[疑問に思うなら:コードは何をしているのですか?MP3ファイルを連結しています:silences.mp3+ductions.mp3少しランダムなインダクションで長いトラックを作成します]
助けてくれた人に感謝します!
@ECHO OFF
CLS
SETLOCAL EnableExtensions EnableDelayedExpansion
REM ----------- SET VALUES -----------
REM RECOMMENDED FORMAT : MP3 CBR 16kHz --> 8kbps silence & 16kbps voice
SET Folder=.\inductions\
SET SilenceMP3=1s-blank.mp3
SET OutputMP3=output.mp3
REM ----------- GET USER INPUTS -----------
SET /p MAX_TIME=Maximum time seconds :
SET /p MIN_TIME=Minimum time seconds :
SET /p LOOP=Nombre de repetitions :
SET /a MAX_TIME-=MIN_TIME
REM ----------- COUNTING NB OF INDUCTION AVAIL -----------
SET Nb_induction=0
for /r "%folder%" %%a in (*.*) do ( SET /a Nb_induction+=1 )
REM ----------- INIT THE OUTPUT WITH 1s SILENCE -----------
copy /Y %SilenceMP3% %OutputMP3% 1> nul
for /L %%i IN (0,1,%LOOP%) do (
REM ----------- GET A RANDOM TIME SILENCE -----------
SET /A REP=!RANDOM! %% !MAX_TIME! + !MIN_TIME!
REM ----------- ADD !REP! seconds of silence -----------
for /L %%j IN (0,1,!REP!) do (
copy /B %OutputMP3% + /B %SilenceMP3% /B %OutputMP3% 1> nul
)
sleep 1
REM ----------- ADD RANDOM INDUCTION -----------
SET /a x=!RANDOM! %% %Nb_induction%
for /r "%folder%" %%a in (*.*) do (
IF !x!==0 ( SET InductionMP3=%%a )
SET /a x-=1
)
copy /B %OutputMP3% + /B !InductionMP3! /B %OutputMP3% 1> nul
echo %%i
)
アントニオ(最初の感謝)、あなたのコード出力:
Maximum time seconds : 20
Minimum time seconds : 10
Nombre de repetitions : 2
AVAILABLE INDUCTION FILES:
InductionMP3[1]=D:\auto-induction\inductions\je_sors_de_mon_corps1.mp3
InductionMP3[2]=D:\auto-induction\inductions\je_sors_de_mon_corps2.mp3
InductionMP3[3]=D:\auto-induction\inductions\je_sors_de_mon_corps3.mp3
RANDOM INDUCTION # 1: D:\auto-induction\inductions\je_sors_de_mon_corps1.mp3
copy /B output.mp3 + /B D:\auto-induction\inductions\je_sors_de_mon_corps1.mp3 /
B output.mp3
0
RANDOM INDUCTION # 1: D:\auto-induction\inductions\je_sors_de_mon_corps1.mp3
copy /B output.mp3 + /B D:\auto-induction\inductions\je_sors_de_mon_corps1.mp3 /
B output.mp3
1
RANDOM INDUCTION # 2: D:\auto-induction\inductions\je_sors_de_mon_corps2.mp3
copy /B output.mp3 + /B D:\auto-induction\inductions\je_sors_de_mon_corps2.mp3 /
B output.mp3
2
cmdの問題:(この不思議な問題がわからないので、今のところモジュロ演算を続けました)
SET /a x=(!RANDOM! * Nb_induction) / 32768 + 1
歩留まりエラー:
/ was unexpected at this time.
私は()もっと試しました:SET /a x=((!RANDOM! * Nb_induction) / 32768 ) + 1
これ以上成功しません!
1- %%モジュロ演算子は、整数除算の余りです。set / A mod = 13%%5は3を与えます。en.wikipedia.org/wiki/Random_number_generationを参照してください。
同意します、あなたの解決策は適切な数学/統計の実装です(winが乗算/除算を正しく処理できる場合;-))
2-!InductionMP3 [!x!]を表示します!教育目的のためだけの例ですが、使用することはできません(私の答えで言ったように)。
そうです、!InductionMP3 [!x!] !,!InductionMP3 [%x%]!など...それでもEnableDelayedExpansionのものでは取得できません%a%%% a!a!等...
3-問題を見つけるのに役立ついくつかのECHOコマンドをコードに追加しました。上記のプログラムをもう一度コピーして実行し、質問の編集としてコード形式で出力を投稿してください(コメントではありません)。
面倒な返信でごめんなさい
4-アレイ管理に関する投稿を読みましたか?それほど難しいことではないと思いますが、お気軽にご質問ください。
私はそうしました、配列は非常に大丈夫/簡単です、それはまだ私の制御の及ばない%variable%のものです...