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

Batch - Problem mit Anführungszeichen

Frage Entwicklung Batch & Shell

Mitglied: tray-park

tray-park (Level 1) - Jetzt verbinden

28.04.2011, aktualisiert 11:49 Uhr, 12590 Aufrufe, 22 Kommentare

Ich habe ein Problem mit Anführungszeichen / Gänsefüßen

Hi,

in meiner Batch definiere ich einen String in einer Variable
01.
Set var="<service="ko">"
Leider gibt es ein Problem mit den Sonderzeichen <">"

Weiß jemand wie ich die Zeichen unterbringe, ohne dass ein Fehler auftritt?

Freue mich über jede Antwort.

Liebe Grüße

Tray
Mitglied: Snowman25
28.04.2011 um 11:57 Uhr
Hallo tray-park,

Ich kann bei der Zuweisung keine Fehler finden.
U:\>set var="<server="ko">" 
U:\>echo %var% 
"<server="ko">"
Ist richtig.
Ebenso:
U:\>echo set var="<server="ko">">vartest.bat 
U:\>type vartest.bat 
set var="<server="ko">" 
U:\>set "var=" 
U:\>vartest.bat 
U:\>set var="<server="ko">" 
U:\>echo %var% 
"<server="ko">"
Dein Problem liegt wahrscheinlich bei der weiteren Verwendung der Variable. Da musst du einfach die Zeichen mit einem Caret (^) maskieren. Aufgrund des etwas eigenartigen Verhaltens der Shell musst du es so machen:
01.
set var="^<server=^"ko^^"^>"
Gruß
Snow
Bitte warten ..
Mitglied: 60730
28.04.2011 um 12:00 Uhr
moin,

N:\>set "otto=<hallo>" 
 
N:\>set otto 
otto=<hallo> 
 
N:\>echo %otto% 
Syntaxfehler. 
 
N:\>echo "%otto%" 
"<hallo>" 
 
N:\>set "otto=<hallo=echo">" 
Das System kann den angegebenen Pfad nicht finden. 
 
N:\>set "otto=<hallo=echo"">"" 
 
N:\>echo "%otto%" 
"<hallo=echo"">""
Gruß
Bitte warten ..
Mitglied: tray-park
28.04.2011 um 14:25 Uhr
Hi,

danke für die schnelle Antwort.

Ja das Stimmt, mit der Variable geschieht noch so einiges.

Unter anderem wird sie zum suchen eines Strings in einer Datei verwendet.

Also kurz
01.
Set "var=<service="ko">"" 
02.
findstr /i "%string%" %PfadZurDatei%\*.txt
So könnte es funktionieren?

Ich teste das morgen mal.

Dankeschön.

Grüße Tray
Bitte warten ..
Mitglied: tray-park
29.04.2011 um 13:07 Uhr
Hat funktioniert.

Vielen Dank euch allen.

Liebe Grüße

Tray
Bitte warten ..
Mitglied: tray-park
05.05.2011 um 10:21 Uhr
Jupp Hallo,

war wohl etwas voreilig.

Wenn ich es so mache, wie ihr es mir gezeigt habt, werden immer die Anführungszeichen mit ausgegeben.
01.
"<hallo=echo"">"
Das soll aber nicht so sein.
Es müsste so aussehen.
01.
<hallo=echo"">
Das bekomm ich irgendwie nicht hin.

Hab ich vielleicht was falsch verstanden?

Grüße Tray
Bitte warten ..
Mitglied: Snowman25
05.05.2011 um 10:25 Uhr
Hallo Tray,

machs so:
01.
"set var=^<server=^"ko^^"^>"
Gruß
Snow
Bitte warten ..
Mitglied: tray-park
05.05.2011 um 10:38 Uhr
Hi,

danke für die rasche Antwort.

01.
set var=^<server=^"ko^^"^>" 
02.
echo %var% 
03.
Das System kann die angegebene Datei nicht finden.
???
Bitte warten ..
Mitglied: Snowman25
05.05.2011 um 10:39 Uhr
Du hast ein Anführungszeichen VOR dem var vergessen.

Gruß
Snow
Bitte warten ..
Mitglied: tray-park
05.05.2011 um 14:42 Uhr
Irgendwie funktioniert es nicht, was ich vorhabe.

Ich zeig euch jetzt mal wie die Batch weiter geht. Vielleicht hilft das.
01.
set "string=^<server status=^"ok^^"^ /^>" 
02.
echo %string% 
03.
 
04.
IF EXIST "status.xml" ( 
05.
	echo Start 
06.
	goto Start  
07.
)	ELSE ( 
08.
		echo Fehler 
09.
		goto Fehler) 
10.
 
11.
:Start 
12.
findstr /i "%string%" D:\TEST\status.xml 
13.
if errorlevel 1 ( 
14.
	goto Fehler 
15.
	echo Fehler 
16.
)	ELSE ( 
17.
		echo Ende 
18.
		goto Ende) 
19.
 
20.
:Fehler 
21.
echo Error 
22.
goto Mailversand 
23.
 
24.
:Mailversand 
25.
echo "Sende Fehlermeldung" 
26.
goto Finish 
27.
 
28.
:Ende 
29.
echo Error 
30.
 
31.
:Finish 
32.
exit
Es wird eine xml-Datei geliefert.
Ist in dieser der String <server status="ok" /> zu finden ist alles in Ordnung.
Findet die Batch den String nicht, wird eine Mail gesendet.

Wenn man der Variable keine Sonderzeichen mit gibt, funktioniert alles. Bsp. set string=4GetIt

Grüße

Tray
Bitte warten ..
Mitglied: Snowman25
05.05.2011 um 14:48 Uhr
01.
set "string=^<server status=^"ok^" /^>" 
02.
findstr /i "%string%" test.xml 
03.
<server status="ok" />
Bitte warten ..
Mitglied: tray-park
05.05.2011 um 15:13 Uhr
Lieder steht in der string Variable im findstr Kommando dann "^<server status=^"ok" />"
01.
findstr /i "^<server status=^"ok" />" test.xml
Bitte warten ..
Mitglied: Snowman25
05.05.2011 um 15:17 Uhr
Zitat von tray-park:
Lieder steht in der string Variable im findstr Kommando dann "^<server status=^"ok" />"
Also so langsam denke ich wirklich, du machst das extra...
Is doch nicht so schwer, oder? Alle Umleitungszeichen und Anführsstriche innerhalb der variable werden mit einem ^ maskiert. Und dann funktioniert es.
Ist es so schwer, die erste Zeile aus dem letzten Stück code zu kopieren??
Bitte warten ..
Mitglied: tray-park
05.05.2011 um 15:47 Uhr
Ich hab mich wohl mit der ganzen kopiererei etwas verhaspelt. Es ist ja noch kein Meister vom Himmel gefallen.

Dann liegt das Problem im findstr. Wenn nämlich in der xml nur <server status="ok" /> steht klappts.
Da in der Datei aber mehrere Tags sind, muss ich noch etwas forschen.

Danke für die Hilfe.
Bitte warten ..
Mitglied: Snowman25
05.05.2011 um 15:49 Uhr
Gib uns doch einfach einen Ausschnitt aus der xml-Datei, aus der du davor alle wichtigen Daten ausge'x't hast.
Bitte warten ..
Mitglied: tray-park
05.05.2011 um 16:23 Uhr
So ne xml sieht wie folgt aus
01.
<body> 
02.
<rueckmeldung> 
03.
<server status="ok" />  
04.
<ergebnis> 
05.
<xxx>xxx</xxx>  
06.
</rueckmeldung> 
07.
</ergebnis> 
08.
</body>
Bitte warten ..
Mitglied: Snowman25
05.05.2011 um 16:31 Uhr
Funktioniert bei mir wunderbar. Sowohl als .bat-Script oder wenn ichs direkt eingeb.
Bitte warten ..
Mitglied: tray-park
05.05.2011 um 16:35 Uhr
Bei einem Fehler ändert sich ja ein Teil der XML. Dann steht da
01.
<server status="error" />  
Dann springt er bei dir an die richtige Stelle (:Fehler) im Skript? Seltsam.
Bitte warten ..
Mitglied: 60730
05.05.2011 um 19:09 Uhr
moin,

ich hab dir das da oben doch hingemalt... (Unterschied zwischen echo und set)

Und warum so kompliziert?

Achtung ungetestet und das einzige\ ist eine Pipe - die kann mein Rechner nicht..
<edit> ich war mal in meiner Sonderzeichensammlung...</edit>

01.
IF not EXIST "status.xml" echo nix zum testen da & goto somewhere_over_the_rainbow 
02.
findstr /i "status" "status.xml" | findstr "ok" && echo alles im Lot aufm Boot 
03.
findstr /i "status" "status.xml" | findstr "error" && echo maschiin gabudd 
04.
goto eof 
05.
:somewhere_over_the_rainbow 
06.
pause
Gruß
Bitte warten ..
Mitglied: tray-park
06.05.2011 um 10:24 Uhr
Hi,

perfekt! So funktioniert es!

Vielen Dank in die Runde.

Liebe Grüße

Tray
Bitte warten ..
Mitglied: tray-park
06.05.2011 um 12:44 Uhr
Määp.

War wohl doch nix. In der xml gibt es einen weiteren Tag, der Probleme macht. Indem kann nämlich auch
01.
<4Till status="ok" >
Dieser interessiert mich aber nicht. Nur den server status="ok" kann ich gebrauchen.
Steht nun aber im 4Till ein "ok" und im server status ein "error" ist trotzdem alles in Ordnung.

Schade.
Bitte warten ..
Mitglied: tray-park
06.05.2011 um 13:47 Uhr
Naja, irgendwie logisch.

Man lasse einfach etwas weg und siehe da...
01.
IF not EXIST "status.xml" echo nix zum testen da & goto somewhere_over_the_rainbow  
02.
 
03.
rem findstr /i "status" "status.xml" | findstr "ok" && echo alles im Lot aufm Boot  
04.
 
05.
findstr /i "status" "status.xml" | findstr "error" && echo maschiin gabudd && goto Fehler 
06.
 
07.
:somewhere_over_the_rainbow  
08.
exit 
09.
:Fehler 
10.
pause
Grüße Tray
Bitte warten ..
Mitglied: 60730
06.05.2011 um 21:04 Uhr
moin,

Zitat von tray-park:
Määp.

War wohl doch nix. In der xml gibt es einen weiteren Tag, der Probleme macht. Indem kann nämlich auch
<4Till status="ok" >
Dieser interessiert mich aber nicht. Nur den server status="ok" kann ich gebrauchen.
Steht nun aber im 4Till ein "ok" und im server status ein "error" ist trotzdem alles in Ordnung.

Schade.
Schade?
Schade finde ich
  • wenn man(n) alles selber machen muß
  • Wenn man(n) dann noch alles tröpfchenweise mitkriegt.

DEMO an der Notbüxse - zur einfachen änderung für mich zwischen den einzelnen Dempläufen keine .xml sondern eine ini 
 
C:\script\status>C:\script\status\status.cmd 
 
C:\script\status>IF not EXIST "status.ini" echo nix zum testen da   & goto somewhere_over_the_rainbow 
 
C:\script\status>findstr /i /c:"<server status" "status.ini"   | findstr "ok" && echo alles im Lot aufm Boot 
 
C:\script\status>findstr /i "status" "status.ini"   | findstr "error"   && echo maschiin gabudd 
 
C:\script\status>goto eof 
 
C:\script\status>
So siehts aus, wenn nur <4Till status="ok" > da steht

...und so wenn auch <server status="error" /> da steht:
C:\script\status>C:\script\status\status.cmd 
 
C:\script\status>IF not EXIST "status.ini" echo nix zum testen da   & goto somewhere_over_the_rainbow 
 
C:\script\status>findstr /i /c:"<server status" "status.ini"   | findstr "ok" && echo alles im Lot aufm Boot 
 
C:\script\status>findstr /i "status" "status.ini"   | findstr "error"   && echo maschiin gabudd 
<server status="error" /> 
maschiin gabudd 
 
C:\script\status>goto eof 
 
C:\script\status>
so, wenn die beiden in der ini stehen:

<4Till status="ok" >
<server status="ok" />

C:\script\status>C:\script\status\status.cmd 
 
C:\script\status>IF not EXIST "status.ini" echo nix zum testen da   & goto somewhere_over_the_rainbow 
 
C:\script\status>findstr /i /c:"<server status" "status.ini"   | findstr "ok"&& echo alles im Lot aufm Boot 
<server status="ok" /> 
alles im Lot aufm Boot 
 
C:\script\status>findstr /i "status" "status.ini"   | findstr "error"   && echo maschiin gabudd 
 
C:\script\status>goto eof 
 
C:\script\status>
Das Script, was das macht, - bzw. die Änderung zum ersten ungetesteten Schnippsel - siehst du da oben 3*
Und falls es auch <4Till status="error" > gibt - dann machs so:
Wenn gar kein Status da ist - mußt du doch erst recht die Ohren spitzen und die Augen scharf stellen.

01.
IF not EXIST "status.ini" echo nix zum testen da & goto somewhere_over_the_rainbow 
02.
findstr /i /c:"<server status" "status.ini" | findstr "ok" && echo alles im Lot aufm Boot 
03.
findstr /i /c:"<server status" "status.ini" | findstr "error" && echo maschiin gabudd 
04.
goto eof 
05.
:somewhere_over_the_rainbow 
06.
pause 
07.
:eof
Gruß
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
gelöst Spezielles Batch Problem mit Zahlen 20 + 29 (2)

Frage von narthan zum Thema Batch & Shell ...

Batch & Shell
gelöst Grosses Variablen Problem ( Batch) (30)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...