2017-04-02 4 views
0

Ich habe eine Textdatei (trimlist.txt) mit einer variablen Anzahl von Zeilen, aber jede Zeile ist ähnlich mit einem variablen Dateipfad und -namen und 2 durch Koma getrennt Zahlen:cmd Batch-Datei; Zuweisen verschiedene Parameter aus einer Textdatei

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

Ich brauche 3 verschiedene Variablen aus jeder Zeile: mov, 3.6369666 & 1.2345666 in diesem Beispiel. Ich kann die 2 letzten Variablen erhalten wie diese

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" 

Also mit dem obigen Text meine letzte commmand Datei wird

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

Ich würde die "mov" von E:\test\00037_20161001_100956 01 -trimmed.mov wie eine Variable aus dem Text-Datei genommen werden .

Jede Hilfe wird sehr geschätzt.

+0

Sie * kann * tun dies mit 'cmd' aber es wird dazu neigen, hässlich und Fehler zu sein -anfällig. Irgendwann sollten alle 'cmd' Leute entscheiden, Powershell zu untersuchen. – paxdiablo

+0

haben Sie das ausgecheckt: http://stackoverflow.com/questions/17289969/how-to-split-command-output-in-windows-command-prompt es scheint, was Sie wollen, ist bei einem ',' – Chris

Antwort

1

Versuchen Zugabe

echo %%~xF 

in die äußere Schleife.

Es ist nicht klar, was Sie eigentlich tun wollen - mit einem Beispiel der Ausgabe Elemente erforderlich, wäre es vielleicht einfacher zu helfen sein.

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" 
) 

Ich glaube, das sollte passen.

Hinweis: Die Syntax SET "var=value" (wobei der Wert möglicherweise leer ist) wird verwendet, um sicherzustellen, dass etwaige nachgestellte Leerzeichen nicht im zugewiesenen Wert enthalten sind. set /a kann "quoteless" sicher verwendet werden.

set var+=1 wird gerne 1 zu var zuweisen, wenn var nicht definiert ist.

Seit wann counter definiert wurde, können Sie einen Platz auf jeder Seite eines führenden-Nullen gefüllten Wertes in dem Zieldateinamen erfordern, wäre der einfachste Weg, counter zu eine Zahl> 100 endet in ‚00‘ zu initialisieren sein Wenn Sie mit dem Zählen beginnen möchten, wählen Sie die letzten beiden Zeichen der Zeichenfolge aus.

+0

zu teilen Danke für deine Antwort. Ich bearbeite meinen ersten Beitrag, um zu zeigen, wie der Befehl aussehen soll. Ich hoffe, das hilft. – Joet

0

Schließlich fand wie

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" 
) 

i nur zu tun haben die Erweiterung der Datei erhalten mit %%~xF

Verwandte Themen