2

各ファイルごとにカスタム AVIsynth スクリプトを生成するバッチ ファイルを作成しようとしています。現在、バッチ ファイルは、ビデオ ファイルが存在するフォルダー内から実行するように設定されています。私がする必要があるのは、ファイルの作成時刻を取得して、タイムコードのバーンインを生成することです。必要な情報を取得するのに問題はありません。ただし、ファイルが午後に作成された場合は、24 時間である必要があります。たとえば、午後 2 時は 14 と表示する必要があります。

newth必要に応じて 12 を追加する変数を作成する if ステートメントが機能しています。ただし、それが必要ない場合、変数は存続します。ループの後続の各反復では、変数は変更されません。

私の例。最初のファイルは午後 2 時に作成され、もう 1 つは午後 12 時に作成された 2 つのファイルがあります。2pm ファイルが最初に読み込まれ、newth変数は 14 になります。次のファイルでは、newth変数は 12 になるはずですが、代わりに 14 のままです。これを修正するにはどうすればよいですか?

@Echo Off & CLS
SetLocal EnableDelayedExpansion
For /F %%a In ('dir *.mpg /b') Do (
    ECHO Processing "%%a"
    echo %%~ta
    set time=%%~ta
    set th=!time:~11,2!
    set tm=!time:~14,2!
    set era=!time:~17,2!
    echo !era!
    if "!era!"=="PM" (
        if !th! LSS 12 ( set /a newth=!th!+12 )
    ) else ( set /a newth=!th!)

    echo !newth!
    echo //AviSynth Test Script >scripts/%%a.avs
    echo DirectshowSource^("%%~fa"^)>>scripts/%%a.avs
    echo LanczosResize^(720,400^) >>scripts/%%a.avs
    echo ShowSMPTE^(^) >>scripts/%%a.avs

    ECHO Back to Console
    Pause
)

echoデバッグに使っていたので少し面倒です。しかし、うまくいけば、問題は明確です。

4

3 に答える 3

1

コードにはいくつかの問題があります。主要なものはこのシーケンスです

if "!era!"=="PM" (
    if !th! LSS 12 ( set /a newth=!th!+12 )
) else ( set /a newth=!th!)

最初のファイルタイム "02:xx PM"
th=02、era=PM で、=14をset /a newth=02+12設定します。newth

2 番目のファイルタイム "12:xx PM"
th=12, =PM では、アクションeraがないため、何もしません。else!th! LSS 12

したがって、newth14のままです。

それで - 修正は何ですか?これ以上使用しないnewthため、確実なことは言えませんが、24 時間形式の 4 桁が必要なようですhhmm

危険、ウィル・ロビンソンの瞬間その 1:
あなたは LEADING ZEROES で始まる数字を扱っています。値が08or09である場合を除いて、すべて問題ありませんが、バッチは最初から奇妙に OCTAL として解釈します0

危険、ウィル・ロビンソンの瞬間番号 2:
set /a先頭のゼロを抑制するため、時間set /a newth=!th!を に設定newthします- ではありません...707:36 AM07

それで - これをすべて克服する方法は?

IF !th!==12 SET th=00
SET th=!th: =0!
if "!era!"=="PM" (set /a newth=1!th!+12
 SET newth=!newth:~-2!
) else ( set newth=!th!)

12 AMこれにより、 to00 AM12 PMto が強制されます 次に、いずれかが に00 PM
置き換えられます (先頭にスペースがある場合はゼロではありません) 次に、 が の場合は、時間番号の前に文字列で 100 を追加し、12 を追加して最後の 2 文字を取得し ます。spaces0
eraPM12-digit
th

残念ながら、時間形式で先頭のゼロを使用するかどうかを指定していないため、少し複雑になりました。それにもかかわらず、不完全な元の計算方法には問題があります。

危険、ウィル・ロビンソンの瞬間番号 3:魔法の変数
timeです。そして、ミッキーが物事に巻き込まれたときに何が起こったのかを知っています。

timeバッチで設定すると、 %time%or!time!は設定した値を返します。設定しない場合、返される値はシステム時間になります。同じことがDATEいくつかの同様の値にも当てはまります(set /?プロンプトから参照してください-最後にリストがあります)

于 2013-05-30T04:42:52.423 に答える