Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Environment-Variable in Datei ausgeben ohne Auflösung

Frage Entwicklung Batch & Shell

Mitglied: andimue

andimue (Level 1) - Jetzt verbinden

16.05.2012, aktualisiert 14:38 Uhr, 5024 Aufrufe, 18 Kommentare

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:

01.
   
02.
>  ~destserver.hta  echo  ^<html^> 
03.
  >> ~destserver.hta  echo  ^<head^> 
04.
  >> ~destserver.hta  echo  ^<title^>Abfrage Zielsystem(e)^</title^> 
05.
  >> ~destserver.hta  echo  ^<HTA:APPLICATION  
06.
  >> ~destserver.hta  echo       ID="HTAUI"  
07.
  >> ~destserver.hta  echo       APPLICATIONNAME="HTA User Interface" 
08.
  >> ~destserver.hta  echo       SCROLL="no" 
09.
  >> ~destserver.hta  echo       SINGLEINSTANCE="yes" 
10.
  >> ~destserver.hta  echo       WINDOWSTATE="maximized" 
11.
  >> ~destserver.hta  echo  ^> 
12.
  >> ~destserver.hta  echo  ^</head^> 
13.
  >> ~destserver.hta  echo  ^<style^>
Bei folgendem Kommando habe ich ein Problem:
...
01.
   
02.
  >> ~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.
Mitglied: Skyemugen
16.05.2012 um 12:29 Uhr
Aloha,

DOS-Skript, hm? Zweifel ...

naja, wie auch immer echo %%temp%%

greetz André

P.S.: Deine Frage und deine Threadüberschrift haben irgendwie nicht wirklich etwas gemeinsam ...
P.P.S.: <code></code>
Bitte warten ..
Mitglied: andimue
16.05.2012 um 12:45 Uhr
Servus Skyemugen,

P.P.S hab ich gleich korrigiert
P.S da könntest du recht haben

zu deiner Antwort:

wenn ich das mache:
01.
echo %%temp%% > temp.txt
erhalte ich in temp.txt --> %C:\DOKUME~1\andi\LOCALS~1\Temp%

in der zu erzeugenden Ausgabedatei soll aber %temp% stehen. Deinen Vorschlag hatte ich auch schon ausprobiert (auch mit noch mehr %-Zeichen).
Bitte warten ..
Mitglied: Penny.Cilin
16.05.2012 um 12:45 Uhr
<offtopic> DOS Batch/Fenster gibt es schon seit Windows NT nicht mehr. Das nennt sich jetzt CLI bzw. Shell Scripting </offtopic>
Bitte warten ..
Mitglied: Goalie
16.05.2012 um 12:49 Uhr
Hallo,

sollte folgendermaßen funktionieren:

01.
echo ^%temp^% > temp.txt
Gruß

Goalie
Bitte warten ..
Mitglied: andimue
16.05.2012 um 13:03 Uhr
Hallo goalie,

das mit dem Entwerten von Sonderzeichen kenn ich und habe es in meinem Code z.B. für < und > angewandt.
Dein Vorschlag funktioniert so wie vorgeschlagen auch prima. Es steht %temp% in der Datei

Wenn ich ihn allerdings in meinen Code einbaue der dann wie folgt aussieht:
01.
>> ~destserver.hta  echo  	cmdToExec = "cmd /V:on /c ^> ^%temp^%\zielserver.txt   echo " + string1 
erhalte ich folgendes:

.javacmdToExec = "cmd /V:on /c ^> ^%temp^%\zielserver.txt echo " + string1

P.S. ich hatte das auch schonmal ausprobiert und mangels Erfolg wieder verworfen
Bitte warten ..
Mitglied: andimue
16.05.2012 um 13:11 Uhr
Ich habe gerade meinen Befehl mal zerlegt und festgestellt, dass es wohl wegen der im Befehl enthaltenen " nicht richtig ausgegeben wird.
Ohne Anführungszeichen wäre alles ok.

01.
>> ~destserver.hta  echo  	cmdToExec = cmd /V:on /c ^> ^%temp^%\zielserver.txt   echo  + string1 
liefert das erhoffte Ergebnis :

.javacmdToExec = cmd /V:on /c > %temp%\zielserver.txt echo + string1


Allerdings hab ich dann da das Problem, dass ich die Anführungszeichen wirklich brauche
Bitte warten ..
Mitglied: andimue
16.05.2012 um 13:17 Uhr
Ich glaube, ich habe die Lösung.
Wenn ich die Anführungszeichen auch noch mit ^ entwerte scheint es zu funktionieren:

01.
>> ~destserver.hta  echo  	cmdToExec = ^"cmd /V:on /c ^> ^%temp^%\zielserver.txt   echo^ " + string1 

( und das soll dann noch ein Mensch verstehen...)

Vielleicht hat ja noch jemand eine "schönere" Lösung. Ansonsten würde ich den Beitrag als Gelöst markieren.
Danke an den creativen Input
Bitte warten ..
Mitglied: Skyemugen
16.05.2012 um 13:32 Uhr
Aloha,

hm, eigentlich ... aus einem Skript heraus sollte das funktionieren.

greetz André
Bitte warten ..
Mitglied: Skyemugen
16.05.2012 um 13:41 Uhr
Aloha,

edit: alles Blödinn hier!!! Mann, diese ganze cmd-echo-Kacke verwirrt mich heute, in einem Skript führt ^% zu rein gar nichts ...

greetz André
Bitte warten ..
Mitglied: andimue
16.05.2012 um 13:54 Uhr
Servus,

jetzt muss ich mich doch nochmal melden. Ich hab gerade nochmal getestet und wegen des Ergebnisses fall' ich fast vom Glauben ab:

ich rufe im cmd-Fenster ein Skript mit folgendem Inhalt auf:

01.
>  t.txt  echo  Testzeile 
02.
>> t.txt  echo  %%temp%%
Das Ergebnis in t.txt ist:

Testzeile
%temp%

Wenn ich nun im selben cmd-Fenster den Befehl >> t.txt echo %%temp%% aus der Datei nochmal absetze sieht die Datei wie folgt aus:

Testzeile
%temp%
%C:\DOKUME~1\andi\LOCALS~1\Temp%


Muss ich das verstehen ? Wieso ergibt derselbe Befehl unterschiedliche Ergebnisse ? Es scheint mir fast, dass beim Aufruf des Skripts die DelayedExpansion eingeschaltet ist. Wie kann ich denn das prüfen ?

Verwirrt
Andi
Bitte warten ..
Mitglied: Skyemugen
16.05.2012 um 14:08 Uhr
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) %i (cmd) %%i (batch).

Hat meines Wissens nach auch nichts mit irgendwelchen expansion-Einstellungen zu tun

greetz André
Bitte warten ..
Mitglied: Skyemugen
16.05.2012 um 14:12 Uhr
Aloha Goalie,

sollte ... bei allen möglichen Zeichen, nur nich beim Prozent

Du darfst es gerne selbst versuchen

greetz André
Bitte warten ..
Mitglied: andimue
16.05.2012 um 14:12 Uhr
Hi André,

die Besonderheit von Laufvariablen in for-Loops war mir bewußt aber das auch "normale" Umgebungsvariablen betroffen sind ist mir bisher wohl noch nie aufgefallen.

Wenn dem so ist ( womit ich nicht an deiner Aussage zweifeln möchte ) werde ich nun einfach in mein Skript die Skript-Schreibweise einbauen und hoffen, dass es funktioniert.

Danke für den Schubs in die richtige Richtung
Bitte warten ..
Mitglied: Skyemugen
16.05.2012 um 14:21 Uhr
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 " Zollzeichen (wie ich sie gerne bezeichne), sollte das Escapen von > überflüssig werden, denn sonst wird das ^ mit in der Ausgabe erscheinen.

greetz André
Bitte warten ..
Mitglied: Goalie
16.05.2012 um 14:29 Uhr
Hallo André,

hab das nur schnell im cmd probiert und da gings

Hätte es (vielleicht) vorher noch im Skript testen sollen...

Gruß

Goalie
Bitte warten ..
Mitglied: jeb-the-batcher
16.05.2012 um 16:35 Uhr
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
01.
echo %path% - expandiert 
02.
echo ^%path^% - Ergibt "%path%" 
03.
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
Bitte warten ..
Mitglied: jeb-the-batcher
16.05.2012 um 16:51 Uhr
Hallo Goalie,

es gibt noch einen kleinen Trick damit man sich nicht um Sonderzeichen kümmern muss.
Einfach %magicEcho% verwenden

01.
@echo off 
02.
cls 
03.
setlocal DisableDelayedExpansion 
04.
call :LoadMacros 
05.
 
06.
setlocal EnableDelayedExpansion 
07.
%MagicEcho% Hier klappt alles !&|<> selbst ein einzelnes ^ wird ausgegeben auch "mit Quotes klappt es ^ & |<>"%MagicEnd% 
08.
%MagicEcho% Das einzige was "escaped" werden muss sind Prozentzeichen zb. %%PATH%% %MagicEnd% 
09.
exit /b 
10.
 
11.
:LoadMacros 
12.
set lf=^ 
13.
 
14.
 
15.
set ^"MagicEnd=^%lf%%LF%@echo off)))" 
16.
set ^"\n=^^^%lf%%LF%^%lf%%LF%^^" 
17.
set MagicEcho=for /L %%n in (1 1 2) do (%\n% 
18.
if %%n==2 (%\n% 
19.
<test.tmp (%\n% 
20.
		set /p line=%\n% 
21.
		set /p line=%\n% 
22.
	)%\n% 
23.
	echo(!line:~7,-1!%\n% 
24.
	endlocal%\n% 
25.
) ELSE (%\n% 
26.
> test.tmp (%\n% 
27.
    setlocal EnableDelayedExpansion%\n% 
28.
	prompt #%\n% 
29.
	@echo on%\n% 
30.
	for %%a in (1) do rem # 
31.
exit /b
Ich denke das Macro MagicEcho ist selbst erklärend

jeb
Bitte warten ..
Mitglied: Goalie
16.05.2012 um 17:15 Uhr
Hallo jeb,

danke für die Erklärung.

Hab ich gleich noch mal richtig was dazugelernt!

Gruß

Goalie
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
gelöst Aktueller Besitzer der aktuellen Datei herausfinden und in Variable schreiben (11)

Frage von Peter32 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...