私はバッチスクリプトを学んでいて、いくつかの良い進歩を遂げました(少しですが、時間を節約するのに十分です)。次に、変数を操作したいと思います。私は変数について読んでみましたが、%object%を使用して、いくつかの単純なケースでそれを置き換える方法を知っています。しかし、「IF」ステートメントでそれらをどのように使用するかについては、私にはわかりません。私がやろうとしているのは、要素%lngf%が "en.srt"の場合、要素%lng%を "eng"に置き換えることです。
IF lngf==en.srt SET lng==eng
IF lngf==es.srt SET lng==spa
FOR /R %%A IN (*.avi *.mp4 *.webm *.ogm *.ogv *.flv) do mkvmerge -o "%%~nA.mkv" "%%~A" --language 0:%lng% "%%~nA.%lngf%" --language 0:%lng% "%%~nA.%lngf%"
**私は通常字幕用に3つの言語を持っているので、言語は3回表示されます。
私の出力は次のとおりです。
mkvmerge -o "vsshort.mkv" "C:\Users\Administrator\Desktop\pessoal\tests\video.avi" --language 0:eng "vsshort." --language 0:eng "video."
mkvmerge v30.1.0 ('Forever And More') 64-bit
Erro: The file 'video.' file can't be opened for reading: open file error.
注:-language 0:eng 2回表示されます。 --language 0:engおよびthen --language 0:spaと表示されます。
他の人がコメントで指摘しているように、問題へのアプローチ方法にはいくつかの問題があります。ただし、最大の問題は、同じ行で異なる値の変数を使用しようとしていることです。 %lng%
= eng
の場合、spa
にすることもできません。提供したコードに基づくと、2つの解決策のいずれかが最善の策である可能性があります。
変数は必要ありません
言語オプションがファイルに対して統一されており、%lngf%
値が事前に決定されていない(ファイル、プロパティなどからのもの)が、自分で設定しているものである場合-回避できます非ループ変数は完全に:
mkvmerge -o "%%~nA.mkv" "%%A" --language 0:eng "%%~nA.en.srt" language 0:spa "%%~nA.es.srt"
理由もなくeng
から%lng%
に変更することで、実際にスペースを節約したり、消化や確認を容易にしたりすることはありません。また、不要だったため、~
から%%~A
を削除しました。
OR
言語変数は、特定のファイルで使用できるものによって決まります%lngf%
の値が事前に決定されている場合は、ネストされたif exist else
行を使用して、コマンドの各言語引数全体を変数の文字列として設定し、コマンドでそれぞれを使用できます。 。私はあなたが扱っているデータを見たことがなく、mkvmerge
に精通していませんが、ファイルで利用可能な各言語のフラグがあるとしましょう。
FOR YOUR LOOP WITH PARAMETER %%A DO (
if exist englishflag (set "ENGLISH=--language 0:eng "%%%%~nA.en.srt" ") ELSE (set "ENGLISH=")
if exist spanishflag (set "SPANISH=--language 0:spa "%%%%~nA.es.srt" ") ELSE (set "SPANISH=")
etc. for each language
mkvmerge -o "%%~nA.mkv" "%%A" %ENGLISH%%SPANISH%%ETC%
)
これにより、反復ごとに%%~nA
パラメーターにラップされた言語設定が使用されます。実際には変数でパーセント記号を使用しているため、それらを2倍にする必要があることに注意してください。使用可能な言語(フラグまたは事前に定義されている言語)の場合、その言語の引数とスペースを変数として設定します。使用できない言語の場合、変数は空です。ループの最後に、mkvmerge
とif exist else
ステートメントを持つすべての言語変数が使用されます。明らかにこれはforループではありませんが、ループの内容をこのように構成すると、目的の出力が得られるはずです。これをさらに進める方法について質問がある場合は、お知らせください。