Pfade als Variable in Windows Batch speichern

Guten Tag,

bin kein Spezialist in Windows Batch Programmierung, daher hoffe ich das mir von euch jemand weiterhelfen kann.

Ich möchte Verzeichnis Pfade in einer Variablen abspeichern, jedoch ist die Ausgabe immer leer. Beispiel:

set SSLPATH = D:\Program Files (x86)\OpenSSL\bin
set OUTPUT = %cd%

echo %SSLPATH%
echo %OUTPUT%

Vielen Dank schon mal im vorraus!

bin kein Spezialist in Windows Batch Programmierung, daher
hoffe ich das mir von euch jemand weiterhelfen kann.

Hallo Johnny,

ich bin da auch kein Spezialist mehr.
Mir gelang es bisher nicht Set Befehle zur Laufzeit zu setzen und die dann ggfs. wieder auszulesen.

Was aber geht ist, du setzt die Set-Befehle in eine .bat die du in den Autostart-Ordner reinstellst.

Übrigens, es heißt voraus :smile:

Gruß
Reinhard

Danke für deine Antwort Reinhard!

Was aber geht ist, du setzt die Set-Befehle in eine .bat die
du in den Autostart-Ordner reinstellst.

Finde ich irgendwie komisch, ich möchte ja nur ein wenig Platz im script sparen. Also statt in fast jeder Zeile das folgende zu schreiben:

D:\Program Files (x86)\OpenSSL\bin\openssl req -new -keyout priv-%1.pem -out %1.pem

%SSLPATH%\openssl req -new -keyout priv-%1.pem -out %1.pem

Ich frage mich nur warum es dann überhaupt den set command gibt, wenn der noch nicht mal einen Pfad, der auch nur ein String ist speichern kann! Aber gut wenns eben nicht geht dann nehme ich eben die erste Version!

Hallo,

set SSLPATH = D:\Program Files (x86)\OpenSSL\bin

der SET-Syntax ist ohne Leerzeichen um das Gleichheitszeichen:

set SSLPATH=D:\Program Files (x86)\OpenSSL\bin

Ferner solltest du auf die korrekte Behandlung möglicher Leerzeichen innerhalb des Pfades achten.


PHvL

Hallo PHvL,

set SSLPATH = D:\Program Files (x86)\OpenSSL\bin

der SET-Syntax ist ohne Leerzeichen um das Gleichheitszeichen:

set SSLPATH=D:\Program Files (x86)\OpenSSL\bin

m.E. ist das nicht das Problem. In dem Moment wo da eine Batch läuft sind Variablen durchaus „bekannt“
Nach Beendigung der batch sind sie wieder „unbekannt“, so als ob das auf verschiedenen „Ebenen“ läuft.

Lass mal diese Batch laufen:

Set Var1=„xyz“
set Var2=xyz
Echo Huhu > c:\test\test.txt
Echo %Var1% >> c:\test\test.txt
Echo %Var2% >> c:\test\test.txt
Echo Huhu2 >> c:\test\test.txt

Der Echo-Befehl zeigt dann die Variablen an, mal mit mal ohne Gänsefüßchen. Welche davon brauchbar wäre für die Weiterverarbeitung ist m.E. für die Anfrage wurscht.

Und anschliessend diese Batch:

echo %Var1% > c:\test\xyz.txt
echo %Var2% > c:\test\xyz.txt

Ich glaube darum geht es dem Anfrager. Schreibt man die batch in den Autostartordner „kennt“ auch die zweite Batch die Variablen.
Ansonsten halt nicht.

Vielleicht muß man da ein command /c bzw. cmd /c oder sowas miteinbauen.

Ferner solltest du auf die korrekte Behandlung möglicher
Leerzeichen innerhalb des Pfades achten.

Wie soll das gehen ohne Hochkommas, Gänsefüßchen?

PS: Warum weiß ich nicht, mein Dos-Fenster blitzt immer nur kurz auf und ist dann wieder weg. Also muß ich mich behelfen mit der Umleitung in eine txt-datei.

Gruß
Reinhard

Hallo,

set SSLPATH = D:\Program Files (x86)\OpenSSL\bin

der SET-Syntax ist ohne Leerzeichen um das Gleichheitszeichen:

set SSLPATH=D:\Program Files (x86)\OpenSSL\bin

m.E. ist das nicht das Problem.

doch, da der OP eine Umgebungsvariable %SSLPATH % definiert und dann die Umgebungsvariable %SSLPATH% abfragt.

In dem Moment wo da eine Batch läuft sind Variablen durchaus
„bekannt“

… aber eben nur unter dem Namen, unter dem man sie definiert hat und das ist im Falle des OP inklusive eines Leerzeichens.

Nach Beendigung der batch sind sie wieder „unbekannt“, so als
ob das auf verschiedenen „Ebenen“ läuft.

Das stimmt so nur, wenn du in der Batchdatei SETLOCAL ausführst oder, wenn du die Batch-Dateien tatsächlich „in verschiedenen Ebenen“ wie du es nennst ausführst, d. i. verschiedene Instanzen von CMD benutzt (eine Batchdatei aufrufen, CMD beenden, nächste Batch-Datei in anderer CMD-Instanz aufrufen).

Um Umgebungsvariablen global zu setzen gibt es SETX aus dem Windows-2000-Resource-Kit .

Ferner solltest du auf die korrekte Behandlung möglicher
Leerzeichen innerhalb des Pfades achten.

Wie soll das gehen ohne Hochkommas, Gänsefüßchen?

… genau darauf wollte ich ihn hinweisen, dass sein

%SSLPATH%\openssl

regelmäßig nicht funktionieren wird, weil es das Programm „D:\Program“ nicht gibt.

PS: Warum weiß ich nicht, mein Dos-Fenster blitzt immer nur
kurz auf und ist dann wieder weg.

Das, was du „DOS-Fenster“ nennst ist mit an Sicherheit grenzender Wahrscheinlichkeit keines, sondern eine Eingabeaufforderung der Windows-CMD.

Dass das Fenster nur sehr kurz sichtbar ist, ist klar, da dein Programm ja nur sehr kurz läuft. Würde das Programm länger laufen, wäre es auch länger sichtbar. Damit der Benutzer die Ausgabe deiner Batch-Datei lesen kann, könntest du etwa durch PAUSE auf einen Tastendruck des Benutzers warten, bevor das Programm beendet wird.


PHvL

Hallo Philipp von Luxenburg :smile:),

doch, da der OP eine Umgebungsvariable %SSLPATH % definiert
und dann die Umgebungsvariable %SSLPATH% abfragt.

ich muß mal bei Apollo oder wars Fielmann gehen und meine Brille nachstellen lasse,. ich kann in der Variablen kein Leerzwichen entdecken. Im Variablenwert schon.

Nach Beendigung der batch sind sie wieder „unbekannt“, so als
ob das auf verschiedenen „Ebenen“ läuft.

Das stimmt so nur, wenn du in der Batchdatei SETLOCAL
ausführst oder, wenn du die Batch-Dateien tatsächlich „in
verschiedenen Ebenen“ wie du es nennst ausführst, d. i.
verschiedene Instanzen von CMD benutzt (eine Batchdatei
aufrufen, CMD beenden, nächste Batch-Datei in anderer
CMD-Instanz aufrufen).

Setlocal? Aha, irgendsoein neumodischer Kram, ich glaube in Dos 3.3 war ich recht fit, aber jahrzehntelang nix mit Batches gemacht, die ganzen Neuerungen kenne ich nicht.

Um Umgebungsvariablen global zu setzen gibt es SETX aus dem
Windows-2000-Resource-Kit
.

Aha, danke.

Ferner solltest du auf die korrekte Behandlung möglicher
Leerzeichen innerhalb des Pfades achten.

Wie soll das gehen ohne Hochkommas, Gänsefüßchen?

… genau darauf wollte ich ihn hinweisen, dass sein

%SSLPATH%\openssl

regelmäßig nicht funktionieren wird, weil es das Programm
„D:\Program“ nicht gibt.

Sorry, irgendwas scheine ich da zu übersehen. Ich verstehe schon was du mir sagst, aber kann irgendwie nicht folgen:frowning:

PS: Warum weiß ich nicht, mein Dos-Fenster blitzt immer nur
kurz auf und ist dann wieder weg.

Das, was du „DOS-Fenster“ nennst ist mit an Sicherheit
grenzender Wahrscheinlichkeit keines, sondern eine
Eingabeaufforderung der Windows-CMD.

Okay, da kenne ich den Unterschied nicht. Es wäre mir halt sehr lieb, daß das Fenster solange offenbleibt bist ich da Exit o.ä. eingebe.
Aber halb so wild, sehr selten daß ich auf alte Dos-Befehle zurückgreife, mögen die jetzt auch Windows-Cmd-befehle heißen.

Gruß
Reinhard

Hallo,

doch, da der OP eine Umgebungsvariable %SSLPATH % definiert
und dann die Umgebungsvariable %SSLPATH% abfragt.

ich muß mal bei Apollo oder wars Fielmann gehen und meine
Brille nachstellen lasse,. ich kann in der Variablen kein
Leerzwichen entdecken. Im Variablenwert schon.

der OP definierte

set SSLPATH = D:\Program Files (x86)\OpenSSL\bin

woraufhin die Variable

%SSLPATH %

den Wert (ich füge mal Anführungszeichen hinzu)

" D:\Program Files (x86)\OpenSSL\bin"

hat. Er schreibt dann aber

echo %SSLPATH%

und nicht

echo %SSLPATH %

Setlocal? Aha, irgendsoein neumodischer Kram, ich glaube in
Dos 3.3 war ich recht fit, aber jahrzehntelang nix mit Batches
gemacht, die ganzen Neuerungen kenne ich nicht.

Die einzige Neuerung, die dir offenbar fehlt ist Multitasking, also die Möglichkeit, dass Anwendungen nicht ausschließlich nacheinander ausgeführt werden können, sondern auch quasi parallel.

… genau darauf wollte ich ihn hinweisen, dass sein

%SSLPATH%\openssl

regelmäßig nicht funktionieren wird, weil es das Programm
„D:\Program“ nicht gibt.

Sorry, irgendwas scheine ich da zu übersehen. Ich verstehe
schon was du mir sagst, aber kann irgendwie nicht folgen:frowning:

Der OP wollte – entsprechend seiner Aussagen auf deine Antwort hin – definieren

set SSLPATH=D:\Program Files (x86)\OpenSSL\bin

und dann aufrufen (ich lasse mal die zusätzlichen Parameter weg)

%SSLPATH%\openssl

Dies aber ergibt den Befehl

D:\Program Files (x86)\OpenSSL\bin\openssl

Es wird also das Programm „D:\Program“ aufgerufen und diesem die Parameter „Files (x86)\OpenSSL\bin\openssl“ übergeben – das wird schief gehen.

Okay, da kenne ich den Unterschied nicht. Es wäre mir halt
sehr lieb, daß das Fenster solange offenbleibt bist ich da
Exit o.ä. eingebe.

Ich schrieb ja schon, dass du PAUSE benutzen sollst. Der Befehl PAUSE gibt

Drücken Sie eine beliebige Taste . . .

aus und endet erst, wenn der Benutzer eben dies getan hat.


PHvL

OK, super es läuft!
Hat einerseits am Leerzeichen bei der Variablen gelegen und andererseits musste ich es in Gänsefüßchen setzen wegen den Leerzeichen im Pfad.