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-Key: 463190

Url: https://administrator.de/contentid/463190

Printed on: April 23, 2024 at 23:04 o'clock

Member: BassFishFox
BassFishFox Jun 16, 2019 at 16:24:25 (UTC)
Goto Top
Hi,

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

BFF
Member: Kriegstreiber
Kriegstreiber Jun 16, 2019 at 17:36:25 (UTC)
Goto Top
"%FFPROBE%"

Ist doch ;)
Member: Pjordorf
Pjordorf Jun 16, 2019 at 19:10:40 (UTC)
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
Member: BassFishFox
BassFishFox Jun 16, 2019 at 19:45:08 (UTC)
Goto Top
Exakt.

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

Egal.

Schoene Woche!

BFF
Member: Pjordorf
Pjordorf Jun 16, 2019 at 20:21:23 (UTC)
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
Member: Kriegstreiber
Kriegstreiber Jun 16, 2019 updated at 21:02:20 (UTC)
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.
Member: rubberman
Solution rubberman Jun 17, 2019 at 06:09:01 (UTC)
Goto Top
Setze mal ein CALLvor "C:\Mein Test\FFPROBE.exe".

Steffen
Mitglied: 139920
139920 Jun 17, 2019 updated at 14:48:58 (UTC)
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%
Member: Kriegstreiber
Kriegstreiber Jun 17, 2019 at 19:48:28 (UTC)
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.
Member: colinardo
Solution colinardo Jun 18, 2019 updated at 15:49:04 (UTC)
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
Member: Kriegstreiber
Kriegstreiber Jun 19, 2019 at 22:26:42 (UTC)
Goto Top
Danke euch beiden, "call" war der Sündenbock.