Environment-Variable in Datei ausgeben ohne Auflösung
Hallo,
mein erster Beitrag - falls was falsch sein sollte - bitte seid nachsichtig
Hallo,
folgende Ausgangssituation: ich habe ein sehr umfangreiches Dialog-BAT-Skript, mit dem Dateien auf verschieden Server verteilt wird.
Um mit dem Benutzer zu interagieren benutze ich ein paar Schnipsel vbs-Code und u.a. auch ein bisschen HTA-Code. Und um diesen HTA-Code geht es:
Ich erzeuge den HTA-Code direkt aus meinem Batch-Skript heraus mit Kommandos in der Form:
Bei folgendem Kommando habe ich ein Problem:
...
Das Problem ist, dass ich im HTA-Code wiederum eine Datei im Verzeichnis %temp%\zielserver.txt erzeugen muss.
Zuerst habe ganz normal mit %temp% gearbeitet aber dann wurde natürlich gleich beim Erzeugen der HTA-Datei die Variable %temp% aufgelöst wurde und
mein Code damit nicht funktioniert hat. Dann kam ich auf die Idee, vor Erzeugen des HTA-Codes in meiner Batch-Prozedur das Kommando
"setlocal EnableDeleyedExpansion" zu verwenden und dann mit !temp! zu arbeiten. Damit wiederum funktioniert zwar der HTA-Code aber in meiner Batch-Prozedur kommt es dann zu Problemen.
Ich will also weg von der Lösung mit "setlocal EnableDeleyedExpansion"
Meine Frage:
wie kann ich in einem DOS-Skript einen String %temp% in eine Datei ausgeben, ohne dass dieser String dabei direkt gleich aufgelöst wird ?
Ich bin für jeden Hinweis dankbar.
mein erster Beitrag - falls was falsch sein sollte - bitte seid nachsichtig
Hallo,
folgende Ausgangssituation: ich habe ein sehr umfangreiches Dialog-BAT-Skript, mit dem Dateien auf verschieden Server verteilt wird.
Um mit dem Benutzer zu interagieren benutze ich ein paar Schnipsel vbs-Code und u.a. auch ein bisschen HTA-Code. Und um diesen HTA-Code geht es:
Ich erzeuge den HTA-Code direkt aus meinem Batch-Skript heraus mit Kommandos in der Form:
> ~destserver.hta echo ^<html^>
>> ~destserver.hta echo ^<head^>
>> ~destserver.hta echo ^<title^>Abfrage Zielsystem(e)^</title^>
>> ~destserver.hta echo ^<HTA:APPLICATION
>> ~destserver.hta echo ID="HTAUI"
>> ~destserver.hta echo APPLICATIONNAME="HTA User Interface"
>> ~destserver.hta echo SCROLL="no"
>> ~destserver.hta echo SINGLEINSTANCE="yes"
>> ~destserver.hta echo WINDOWSTATE="maximized"
>> ~destserver.hta echo ^>
>> ~destserver.hta echo ^</head^>
>> ~destserver.hta echo ^<style^>
Bei folgendem Kommando habe ich ein Problem:
...
>> ~destserver.hta echo cmdToExec = "cmd /V:on /c ^> !temp!\zielserver.txt echo " + string1
Das Problem ist, dass ich im HTA-Code wiederum eine Datei im Verzeichnis %temp%\zielserver.txt erzeugen muss.
Zuerst habe ganz normal mit %temp% gearbeitet aber dann wurde natürlich gleich beim Erzeugen der HTA-Datei die Variable %temp% aufgelöst wurde und
mein Code damit nicht funktioniert hat. Dann kam ich auf die Idee, vor Erzeugen des HTA-Codes in meiner Batch-Prozedur das Kommando
"setlocal EnableDeleyedExpansion" zu verwenden und dann mit !temp! zu arbeiten. Damit wiederum funktioniert zwar der HTA-Code aber in meiner Batch-Prozedur kommt es dann zu Problemen.
Ich will also weg von der Lösung mit "setlocal EnableDeleyedExpansion"
Meine Frage:
wie kann ich in einem DOS-Skript einen String %temp% in eine Datei ausgeben, ohne dass dieser String dabei direkt gleich aufgelöst wird ?
Ich bin für jeden Hinweis dankbar.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 185083
Url: https://administrator.de/contentid/185083
Ausgedruckt am: 05.11.2024 um 16:11 Uhr
18 Kommentare
Neuester Kommentar
Aloha,
ach du hast das vorhin im cmd getestet? Dachte in einem Skript ... darum war ich schon sehr verwirrt :D
Ja, cmd prompt und batch-Skript werden unterschiedlich interpretiert, dem Prompt sind doppelte Prozente aka wie man Prozentzeichen korrekt escaped vollkommen egal, siehe Laufvariable(n)
Hat meines Wissens nach auch nichts mit irgendwelchen expansion-Einstellungen zu tun
greetz André
ach du hast das vorhin im cmd getestet? Dachte in einem Skript ... darum war ich schon sehr verwirrt :D
Ja, cmd prompt und batch-Skript werden unterschiedlich interpretiert, dem Prompt sind doppelte Prozente aka wie man Prozentzeichen korrekt escaped vollkommen egal, siehe Laufvariable(n)
%i
(cmd) %%i
(batch).Hat meines Wissens nach auch nichts mit irgendwelchen expansion-Einstellungen zu tun
greetz André
Aloha,
ja, heute ist wieder so ein Tag, da hängt man schon brain-afk im langen Wochenende, da du anfangs von einem ... Skript geschrieben hast, ging ich nicht davon aus, du würdest den Test im cmd machen ... wobei ich vorhin auch reingefallen bin, auf eure ganzen cmd-Testereien, uarg.
So viele Themen handeln von genau diesem Thema hier ... aber wenn man halb brain-afk ist, dann wird der Thread eben manchmal länger ;D
Und wie gesagt: Unter verwendung von
greetz André
ja, heute ist wieder so ein Tag, da hängt man schon brain-afk im langen Wochenende, da du anfangs von einem ... Skript geschrieben hast, ging ich nicht davon aus, du würdest den Test im cmd machen ... wobei ich vorhin auch reingefallen bin, auf eure ganzen cmd-Testereien, uarg.
So viele Themen handeln von genau diesem Thema hier ... aber wenn man halb brain-afk ist, dann wird der Thread eben manchmal länger ;D
Und wie gesagt: Unter verwendung von
"
Zollzeichen (wie ich sie gerne bezeichne), sollte das Escapen von >
überflüssig werden, denn sonst wird das ^
mit in der Ausgabe erscheinen.greetz André
Hallo Goalie,
der Witz ist, es klappt selbst vom cmd-prompt nicht ein Prozentzeichen mit ^ zu escapen, es erweckt bloss den Eindruck
Es funktioniert weil im cmd-prompt unbekannte Variabeln bei der Prozentexpansion nicht verschwinden (aber in einer Batchdatei),
sondern einfach mitsamt der Prozentzeichen unverändert stehen bleiben..
cmd-prompt
Das liegt daran das eine Variable namens path^ oder pa^th gesucht wird, aber nicht existiert, danach wird dann vom Parser einfach noch das ^ entfernt,
und siehe da es scheint ein Prozent escapen zu können.
jeb
der Witz ist, es klappt selbst vom cmd-prompt nicht ein Prozentzeichen mit ^ zu escapen, es erweckt bloss den Eindruck
Es funktioniert weil im cmd-prompt unbekannte Variabeln bei der Prozentexpansion nicht verschwinden (aber in einer Batchdatei),
sondern einfach mitsamt der Prozentzeichen unverändert stehen bleiben..
cmd-prompt
echo %path% - expandiert
echo ^%path^% - Ergibt "%path%"
echo %pa^th% - Ergibt auch "%path%"
Das liegt daran das eine Variable namens path^ oder pa^th gesucht wird, aber nicht existiert, danach wird dann vom Parser einfach noch das ^ entfernt,
und siehe da es scheint ein Prozent escapen zu können.
jeb
Hallo Goalie,
es gibt noch einen kleinen Trick damit man sich nicht um Sonderzeichen kümmern muss.
Einfach %magicEcho% verwenden
Ich denke das Macro MagicEcho ist selbst erklärend
jeb
es gibt noch einen kleinen Trick damit man sich nicht um Sonderzeichen kümmern muss.
Einfach %magicEcho% verwenden
@echo off
cls
setlocal DisableDelayedExpansion
call :LoadMacros
setlocal EnableDelayedExpansion
%MagicEcho% Hier klappt alles !&|<> selbst ein einzelnes ^ wird ausgegeben auch "mit Quotes klappt es ^ & |<>"%MagicEnd%
%MagicEcho% Das einzige was "escaped" werden muss sind Prozentzeichen zb. %%PATH%% %MagicEnd%
exit /b
:LoadMacros
set lf=^
set ^"MagicEnd=^%lf%%LF%@echo off)))"
set ^"\n=^^^%lf%%LF%^%lf%%LF%^^"
set MagicEcho=for /L %%n in (1 1 2) do (%\n%
if %%n==2 (%\n%
<test.tmp (%\n%
set /p line=%\n%
set /p line=%\n%
)%\n%
echo(!line:~7,-1!%\n%
endlocal%\n%
) ELSE (%\n%
> test.tmp (%\n%
setlocal EnableDelayedExpansion%\n%
prompt #%\n%
@echo on%\n%
for %%a in (1) do rem #
exit /b
Ich denke das Macro MagicEcho ist selbst erklärend
jeb