evaeden
Goto Top

Verwendung einer gesetzten Variable noch in derselben Eingabezeile

Liebe Gemeinde,

ich habe ein simples Problem: Ich muss ein paar Befehle in einer Zeile abschicken.
Kein Problem, da verknüpfe ich sie doch mit "&".
Aber wenn ich mit set eine Variable definiere, kann ich sie nicht in der selben Zeile benutzen.

Bsp: set a=abc&echo %a%

Wenn ich dieselbe Zeile nochmal abschicke, funktioniert es. Der set-Befehl muss also mit Enter abgeschickt werden, bevor die Variable initialisiert wird!?
Könnt ihr mir helfen?

Vielen herzlichen Dankeschön!

Content-ID: 237149

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

Ausgedruckt am: 26.11.2024 um 02:11 Uhr

Budders
Budders 05.05.2014 um 13:26:05 Uhr
Goto Top
Am Anfang des Codes ein
setlocal enabledelayedexpansion

und dann anstatt %a% ein !a! verwenden, das sollte das gewünschte Ergebnis erzielen.

MfG Budders
EvaEden
EvaEden 05.05.2014 um 13:44:53 Uhr
Goto Top
Hi Budders,

das habe ich auch schon rauf und runter probiert:

setlocal enabledelayedexpansion&set a=abc&echo !a!

funktioniert leider auch nicht...
EvaEden
EvaEden 05.05.2014 um 13:50:21 Uhr
Goto Top
...was ich eigentlich möchte:

set LOG=Logs%DATE:~6,4%%DATE:~3,2%%DATE:~,2%-%TIME:~,2%%TIME:~3,2%%TIME:~-5%.zip&echo 7-zip a "%LOG: =0%" "FILES"

wollte das Leerzeichen bei Zeiten vor 10:00 Uhr durch 0 ersetzt haben: " 9:00" -> "09:00"

LG, Eva~
Budders
Budders 05.05.2014 aktualisiert um 13:53:35 Uhr
Goto Top
Willst du den ganzen Code in eine Zeile packen?
Und bei mir funktioniert das ohne Probleme, auch in einer Zeile. Jedoch nur aus einer Batch Datei, aus der Kommandozeile wird mir auch nur !a! ausgespuckt face-smile
EvaEden
EvaEden 05.05.2014 um 13:56:48 Uhr
Goto Top
Ja, leider! Es ist ein externer Aufruf aus Python heraus: os.system('DOS-BEFEHLE'). Den Umweg über eine extra Batch wollte ich mir sparen.

Vielen Dank Dir!
Budders
Budders 05.05.2014 um 13:59:59 Uhr
Goto Top
Dann bin ich leider überfragt. Das tut mir leid.
Aber wenn du eine Lösung gefunden hast, kannst du diese gerne hier posten, mich würde das ebenfalls interessieren.
Biber
Lösung Biber 05.05.2014, aktualisiert am 06.05.2014 um 08:34:23 Uhr
Goto Top
Moin EvaEden,

wenn du die delayed expansion auch schon in einer Eingabezeile, also ohne einen Batch nutzen willst, dann musst du (einmalig) DelayedExpansion mittels Registry-Eintrag als Standardverhalten setzen.
Als Normal-Benutzer so:

 reg add "HKCU\Software\Microsoft\Command Processor" /v DelayedExpansion /t REG_DWORD /d 0x1  

Mit "mehr" Rechten kannst du es auch im Zweig HKLM aktivieren als Default für alle Benutzer, falls das Sinn machen sollte.

Jedesmal danach kannst du in jedem neuen CMD-Fenster dein Beispiel
setlocal enabledelayedexpansion&set a=abc&echo !a!
... erfolgreich ausprobieren und natürlich auch deine %log%--String-Erzeugung.

Grüße
Biber
rubberman
Lösung rubberman 06.05.2014 aktualisiert um 08:34:26 Uhr
Goto Top
Hallo EvaEden.

Es ist ein externer Aufruf aus Python heraus

Ich wette, dass es in Python auch so etwas wie ein CreateProcess oder vielleicht sogar eine eigene Klasse gibt, mit der man 7-Zip sinnvoller bedienen könnte. Selbst wenn nicht, wird es doch möglich sein deinen Timestamp im Pythoncode zusammen zu bauen, statt in der aufgerufenen Kommandozeile.

Wie auch immer: Deine Kommandozeile führt dazu, dass die cmd.exe gestartet wird. Ergo kannst du den Aufruf der CMD auch gleich in die Kommandozeile einbauen und dabei gibt es bekanntlich die Option /v:on um die verzögerte Variablenerweiterung einzuschalten.
cmd /v:on /c "set LOG=Logs%DATE:~6,4%%DATE:~3,2%%DATE:~,2%-%TIME:~,2%%TIME:~3,2%%TIME:~-5%.zip&echo 7-zip a "!LOG: =0!" "FILES""

Grüße
rubberman
EvaEden
EvaEden 06.05.2014 um 08:34:06 Uhr
Goto Top
Vielen Dank Biber!

Auf Dich kann man sich wirklich verlassen! Du findest immer eine Lösung!!!


Vielen Dank Rubberman!

Das ist genau die unkomplizierte Lösung die ich brauche! War mir nicht bewusst, dass ich das Commandset nach cmd noch in Anführungszeichen setzen muss (ohne die geht es nicht). Da hätte ich ewig gesucht!

Herzlichst
Eva~