2017-04-02 10 views
0

Iは、行の可変数を有する1つのテキストファイル(trimlist.txt)を有するが、それぞれの行はコマによって分離された変数ファイルのパスおよび名前と2つの数値と類似している:cmdバッチファイル。テキストファイルから異なるパラメータを割り当てる

E:\test\00037_20161001_100956.mov,3.6369666,1.2345666 

この例では、各行から3つの異なる変数、つまり、3.6369666 & 1.2345666を取得する必要があります。私は上記のテキストをファイルにこの

set prevfile= 

for /F "tokens=1,2,3 delims=," %%F in (E:\trimlist.txt) do (
    if "%%F"=="!prevfile!" (
    if "!counter!"=="" (set counter=1) else (set /a counter+=1) 
) else (
    set counter= 
    set "prevfile=%%F" 
     ) 
ffmpeg -ss "%%G" -i "%%F" -c copy -t "%%H" "%%~dpnF!counter!-trimmed.mov" 

のような2つの最後の変数は、だから私の最後のcommmandが、私はE:\test\00037_20161001_100956 01 -trimmed.mov"mov"は、テキストファイルから取られた変数になりたい

ffmpeg -ss 3.6369666 -i "E:\test\00037_20161001_100956.mov" -c copy -t 1.2345666 "E:\test\00037_20161001_100956 01 -trimmed.mov" 

になり得ることができます 。

ご協力いただきますようお願い申し上げます。

+0

あなた* * cmd' 'でこれを行うことができますが、それは醜いとなる傾向があり、エラーでファイルの拡張子を取得する必要があります-prone。ある時点で、 'cmd'の人々はすべてpowershellを調べるべきです。 – paxdiablo

+0

これをチェックアウトしましたか:http://stackoverflow.com/questions/17289969/how-to-split-command-output-in-windows-command-promptそれはあなたが望むものが '、' – Chris

答えて

1

は、あなたの外側のループに

echo %%~xF 

を追加してみてください。

それはあなたが実際にが何をしたいのかはっきりしない - 必要な出力要素の一例で、おそらく助けるために容易になるだろう。

set "prevfile=" 
set "counter=" 
for /F "tokens=1,2,3 delims=," %%F in (E:\trimlist.txt) do (
    if "%%F"=="!prevfile!" (
    if not defined counter set /a counter=10000 
    set /a counter+=1 
) else (
    set "counter=" 
    set "prevfile=%%F" 
     ) 
if defined counter (ffmpeg -ss "%%G" -i "%%F" -c copy -t "%%H" "%%~dpnF-trimmed%%~xF" 
) else (
ffmpeg -ss "%%G" -i "%%F" -c copy -t "%%H" "%%~dpnF !counter:~-2! -trimmed%%~xF" 
) 

私はこれが合うと思います。

注:SET "var=value"(値が空の場合があります)という構文は、後続する空白が割り当てられた値に含まれないようにするために使用します。 set /aは安全に "quoteless"で使用できます。

set var+=1varが未定義の場合、1varに喜んで割り当てます。 counterが定義されているとき、あなたは宇宙先ファイル名の先頭ゼロで満たされた値のいずれかの側を必要とするので

、最も簡単な方法は、「00」で終わる数> 100にcounterを初期化するだろうカウントを開始する場合は、文字列の最後の2文字を選択します。

+0

お返事をありがとうございます。私は最初の投稿を編集して、コマンドがどのように表示されるべきかを示します。希望が役立ちます。 – Joet

0

は最後に行う方法を見つけ

setlocal enableDelayedExpansion 
set prevfile= 
for /F "tokens=1,2,3 delims=," %%F in (E:\trimlist.txt) do (
    if "%%F"=="!prevfile!" (
     if "!counter!"=="" (set counter=1) else (set /a counter+=1) 
    ) else (
     set counter= 
     set "prevfile=%%F" 
    ) 
    ffmpeg -ss "%%G" -i "%%F" -c copy -t "%%H" "%%~dpnF!counter!-trimmed%%~xF" 
) 

私だけ%%~xF

関連する問題