Top-Themen

Aktuelle Themen (A bis Z)

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, 5142 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 ..
Ähnliche Inhalte
Batch & Shell
Powershell: Variablen aus .txt Dateien heraus ausgeben
gelöst Frage von TobiasedBatch & Shell5 Kommentare

Hallo Community, ich möchte gern wissen ob es möglich ist, eine Variable in Powershell zu definieren, die Abfrage dieser ...

Batch & Shell
Environment Variable in GPO Registry Key Name
Frage von ukulele-7Batch & Shell9 Kommentare

Ich habe hier ein Program was für meinen OS und die genutzte Datenbank "nicht frei gegeben" ist. Es erscheinen ...

Java
Java String Variable in printf ausgeben
gelöst Frage von MarabuntaJava1 Kommentar

hallo, wie kriege ich in einem Einzeiler ohne "+" die Ausgabe von String-Variablen hin? danke.

PHP
Wert in Variable schreiben, abfragen, ausgeben
Frage von wescraven07PHP4 Kommentare

Moin Developer, ich hab gerade ein Problem, mit einem Wert, der aus Magento kommt, den ich in eine Variabel ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 2 StundenViren und Trojaner

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 6 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server15 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell10 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Windows Server
Administratoren-Gruppe abfragen?
Frage von 1410640014Windows Server6 Kommentare

Hallo, kennt jemand eine einfache (und schnelle) Möglichkeit, von allen Client-Computern im Active Directorey die Administratoren-Gruppe abzufragen, wer da ...