kriegstreiber
Goto Top

FOR Schleife Befehlsausgabe als Variable setzen, Problem mit Space im Verzeichnis

Ich möchte gerne folgendes machen. Einen Befehl ausführen und die Ausgabe als Variable setzen.

Der Befehl lautet:

"%FFPROBE%" -v error -select_streams v:0 -show_entries stream=height,width -of csv=s=x:p=0 "%INPUTFILE%"

Wenn ich den so in der Batch stehen habe, bekomme ich als Ausgabe : 1920x1080

Diese Ausgabe hätte ich gerne als Variable RESOLUTION

Meine for Schleife sieht so aus:

set RESOLUTION=Unknown
set FFPROBE=C:\Mein Test\FFPROBE.exe
setlocal EnableDelayedExpansion
FOR /F "tokens=*" %%A IN ('"%FFPROBE%" -v error -select_streams v:0 -show_entries stream=height,width -of csv=s=x:p=0 "%INPUTFILE%"') DO (  
	SET RESOLUTION=%%A
	echo !RESOLUTION!
)
echo Resolution = !RESOLUTION!

Das Ergebnis:

Der Befehl "E:\MEIN" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Obwohl das Verzeichnis in den Gänsefüsschen ist und der Befehl alleine funktioniert, warum tut er das in der for Schleife nicht?

Content-ID: 463190

Url: https://administrator.de/forum/for-schleife-befehlsausgabe-als-variable-setzen-problem-mit-space-im-verzeichnis-463190.html

Ausgedruckt am: 06.01.2025 um 20:01 Uhr

BassFishFox
BassFishFox 16.06.2019 um 18:24:25 Uhr
Goto Top
Hi,

Pfade die ein Leerzeichen enthalten musst Du in "" unterbringen.

BFF
Kriegstreiber
Kriegstreiber 16.06.2019 um 19:36:25 Uhr
Goto Top
"%FFPROBE%"

Ist doch ;)
Pjordorf
Pjordorf 16.06.2019 um 21:10:40 Uhr
Goto Top
Hallo,

Zitat von @Kriegstreiber:
"%FFPROBE%"
Eben nicht. Schau dir mal deine Zeile 2 an. Schau dir das Ergebniss an:
set FFPROBE=C:\Mein Test\FFPROBE.exe
Set FFProbe
und dann
set FFPROBE="C:\Mein Test\FFPROBE.exe"  
Set FFProbe
und dann noch
set "FFPROBE=C:\Mein Test\FFPROBE.exe"  
Set FFProbe


Das ist nicht was du meinst was gemeint war. face-smile

Gruß,
Peter
BassFishFox
BassFishFox 16.06.2019 um 21:45:08 Uhr
Goto Top
Exakt.

Da schreibt man schon extra "Pfade" und nicht "Variablen". ;)

Egal.

Schoene Woche!

BFF
Pjordorf
Pjordorf 16.06.2019 um 22:21:23 Uhr
Goto Top
Hallo,

Zitat von @BassFishFox:
Da schreibt man schon extra "Pfade" und nicht "Variablen". ;)
Und seine Antwort hast du doch gesehen. face-smile Bei vielen darfst du heute nicht mehr kleingeschnibbelte Kartoffeln schreiben wenn du über ein Pommesrezept redest, weil es dann Kartoffelsalat gibtface-smile

Gruß,
Peter
Kriegstreiber
Kriegstreiber 16.06.2019 aktualisiert um 23:02:20 Uhr
Goto Top
Das funktioniert trotzdem nicht, auch wenn ich die Variable und nicht nur den Pfad ins Gänsefüsschen setze.

set "FFPROBE=%~dp0ffprobe.exe" geht nicht in der Schleife (ausserhalb ja)  
set FFPROBE="%~dp0ffprobe.exe" geht nicht in der Schleife (ausserhalb ja)  
set FFPROBE=%~dp0ffprobe.exe geht nicht in der Schleife (ausserhalb ja)
Egal wie ich es mache, die Befehlszeile stimmt immer, nur das Output nicht.

MIt "Echo On" wird der Befehl so ausgeführt, wie ich das will:

E:\Video\Test>FOR /F "tokens=*" %A IN ('"C:\Mein Test\FFPROBE.exe" -v error -select_streams v:0 -show_entries stream height width -of csv s x:p 0 "E:\Video\Test\Test.mkv"') DO (set RESOLUTION=%A )  

Der Befehl "C:\Mein" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.

Das passiert auch nur IN DER Schleife, setze ich den Befehl so in die Batch:

"%FFPROBE%" -v error -select_streams v:0 -show_entries stream=height,width -of csv=s=x:p=0 "%INPUTFILE%"  

funktioniert er. Auch ohne " in der Schleife geht es nicht, ich habe so ziemlich jede Kombination jetzt durch :D.
rubberman
Lösung rubberman 17.06.2019 um 08:09:01 Uhr
Goto Top
Setze mal ein CALLvor "C:\Mein Test\FFPROBE.exe".

Steffen
139920
139920 17.06.2019 aktualisiert um 16:48:58 Uhr
Goto Top
Das liegt einerseits an den fehlenden Gänsefüßchen wie schon erwähnt und andererseits fehlen noch ein paar Escapes für die Nutzung im For-Befehl (Für das "=" und das ","), so läuft es ...
@echo off &setocal
set "RESOLUTION=Unknown"  
set "FFPROBE=C:\Mein Test\FFPROBE.exe"  
set "INPUTFILE=C:\Dateien\file.mp4"  
FOR /F "delims=" %%A IN ('"%FFPROBE%" -v error -select_streams v:0 -show_entries stream^=height^,width -of csv^=s^=x:p^=0 "%INPUTFILE%"') DO SET "RESOLUTION=%%A"  
echo Resolution = %RESOLUTION%
Kriegstreiber
Kriegstreiber 17.06.2019 um 21:48:28 Uhr
Goto Top
Die Escapes haben tatsächlich etwas genützt, leider ist das Problem mit dem Space im Verzeichnis Namen immer noch da.
Gegenprobe mit umbenennung in Mein_Test waren erfolgreich, Mein Test allerdings will immer noch nicht.

Ich kann auch in der Schleife "%FFPROBE%" durch "C:\Mein Test\FFPROBE.exe" ersetzen, trotzdem skippt er nach C:\Mein.

FOR /F "delims=" %%A IN ('"C:\Mein Test\FFPROBE.exe" -v error -select_streams v:0 -show_entries stream^=height^,width -of csv^=s^=x:p^=0 "%INPUTFILE%"') DO SET "RESOLUTION=%%A"  

Das funktioniert auch nicht, also gehe ich von aus, dass mein Fehler nicht an der Variablen liegt.
colinardo
Lösung colinardo 18.06.2019 aktualisiert um 17:49:04 Uhr
Goto Top
Servus @Kriegstreiber ,
wie @rubberman schon vorgeschlagen hat (evt. hast du's übersehen?), nutze call vor dem Pfad
FOR /F "delims=" %%A IN ('call "%FFPROBE%" -v error -select_streams v:0 -show_entries stream^=height^,width -of csv^=s^=x:p^=0 "%INPUTFILE%"') DO SET "RESOLUTION=%%A"  
(positiv getestet)

Grüße Uwe
Kriegstreiber
Kriegstreiber 20.06.2019 um 00:26:42 Uhr
Goto Top
Danke euch beiden, "call" war der Sündenbock.