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

Anführungszeichen in der Suchzeichenkette des Befehls findstr maskieren

Frage Entwicklung Batch & Shell

Mitglied: evinben

evinben (Level 2) - Jetzt verbinden

24.12.2012, aktualisiert 25.12.2012, 5512 Aufrufe, 9 Kommentare

Frohe Weihnachtszeit,

falls jemand ein Tipp auf der Schnelle parat hat, wäre es schön...

Das Anführungszeichen in der Suchzeichenkette des Befehls findstr lässt sich nicht maskieren:

01.
	:Bei unzulässigen Zeichen in der Bezeichnung (in dem Dateinamen) Warnung ausgeben und erneut zur Eingabe auffordern. 
02.
	ECHO "%Name-Suffix_of_Differential-VHD%" | findstr "\ / : * ? " < > |" && ( 
03.
		ECHO Ein Dateiname darf keines der folgenden Zeichen enthalten: \/:*?"<>| 
04.
		goto :M5 
05.
		)

Folgendes habe ich probiert, jedoch ohne Erfolg:
\"
^"
""

Alternative Lösungsvorschläge wären natürlich möglich.


Gruß
evinben
Mitglied: Hitman4021
24.12.2012 um 12:58 Uhr
Hallo,

sicher das \" nicht funktioniert?
http://www.robvanderwoude.com/escapechars.php

Gruß
Bitte warten ..
Mitglied: rubberman
24.12.2012, aktualisiert um 15:04 Uhr
Hallo evinben,

dein Script hat einen entscheidenden Knackpunkt:
Du schickst einen in Anführungszeichen eingepackten String an FINDSTR und prüfst anschließend, ob Anführungszeichen vorhanden sind. Ja klar sind dann Anführungszeichen vorhanden. Zudem wirst du das Ganze ohne DelayedExpansion wohl kaum sicher hinbekommen.
01.
setlocal EnableDelayedExpansion 
02.
echo("!Name-Suffix_of_Differential-VHD!"|findstr /rc:"..*[<>|\\/:?\"].*." >nul &&echo Mist. 
03.
endlocal
Ich bin mir nicht ganz sicher ob das schon der Weisheit letzter Schluss ist. Teste mal ein bisschen.

Grüße
rubberman
Bitte warten ..
Mitglied: evinben
24.12.2012, aktualisiert 25.12.2012
Hallo rubberman,

auch mit regulärem Ausdruck in findtsr und mit der Option setlocal EnableDelayedExpansion habe ich probiert, jedoch alles ohne Erfolg.

Auch deine Methode 1:1 habe ich übernommen, jedoch wird folgende Ausgabe jeweils generiert
(paar Minuten habe ich mit verschiedenen anderen Varianten der Maskierungen in findstr probiert...):

01.
FINDSTR: >nul kann nicht ge”ffnet werden. 
02.
FINDSTR: &&echo kann nicht ge”ffnet werden. 
03.
FINDSTR: Mist. kann nicht ge”ffnet werden.
Der Code-Abschnitt sieht momentan so aus:
01.
	:Bei unzulässigen Zeichen in der Bezeichnung (in dem Dateinamen) Warnung ausgeben und erneut zur Eingabe auffordern. 
02.
	setlocal EnableDelayedExpansion 
03.
	ECHO !Name-Suffix_of_Differential-VHD! | findstr /r "[<>|\\/:\"?]" && ( 
04.
		ECHO Ein Dateiname darf keines der folgenden Zeichen enthalten: \/:*?"<>| 
05.
		goto :M5 
06.
07.
		endlocal

Du schickst einen in Anführungszeichen eingepackten String an FINDSTR und prüfst anschließend, ob Anführungszeichen vorhanden sind

Sorry für die Verwirrung, dies war natürlich nicht absichtlich. Ich bin gar nicht so weit gekommen, daher sind mir die Anführungszeichen in der Variable gar nicht aufgefallen.

Gruß
evinben
Bitte warten ..
Mitglied: rubberman
24.12.2012 um 20:03 Uhr
Hallo evinben,

dein letzter Code weicht doch erheblich von dem ab, was ich gepostet hatte. Vielleicht gibst du uns mal den String mit auf den Weg, bei dem du diese Fehlermeldung bekommen hast.

Grüße
rubberman
Bitte warten ..
Mitglied: Friemler
25.12.2012, aktualisiert um 02:13 Uhr
Hallo evinben,

ich schlage eine Lösung mit Inline-VBScript vor:
01.
@echo off & setlocal 
02.
 
03.
:: Irgendwelche Befehle 
04.
:: die 
05.
:: den Dateinamen erzeugen 
06.
 
07.
set "Name-Suffix_of_Differential-VHD=Irgendwas" 
08.
 
09.
 
10.
set "VBScript=%TEMP%\CheckFilename.vbs" 
11.
 
12.
> "%VBScript%" echo.intResult = 0 
13.
>>"%VBScript%" echo. 
14.
>>"%VBScript%" echo.If WScript.Arguments.Count ^> 0 Then 
15.
>>"%VBScript%" echo.  Set objRegExp     = new RegExp 
16.
>>"%VBScript%" echo.  objRegExp.Pattern = "[\\/:\*?<>""]" 
17.
>>"%VBScript%" echo.  If objRegExp.Test(WScript.Arguments(0)) Then intResult = 1 
18.
>>"%VBScript%" echo.End If 
19.
>>"%VBScript%" echo. 
20.
>>"%VBScript%" echo.WScript.Quit intResult 
21.
 
22.
cscript /nologo "%VBScript%" "%Name-Suffix_of_Differential-VHD%" 
23.
 
24.
if ERRORLEVEL 1 ( 
25.
  echo Ein Dateiname darf keines der folgenden Zeichen enthalten: \/:*?^<^>^|" 
26.
) else ( 
27.
  echo Alles klar 
28.
29.
 
30.
del "%VBScript%"
Gruß
Friemler
Bitte warten ..
Mitglied: evinben
25.12.2012, aktualisiert um 14:43 Uhr
Gruß rubberman,

dein letzter Code weicht doch erheblich von dem ab, was ich gepostet hatte.
wie geschrieben ich habe ja weiter experimentiert und das ist einfach der letzte Modifizierungsstand meines Codeabschnittes gewesen, ansonsten nichts weiteres und mehr wollte ich damit ausdrucken.

Vielleicht gibst du uns mal den String mit auf den Weg, bei dem du diese Fehlermeldung bekommen hast.
ich habe ja oben geschrieben:
"Auch deine Methode 1:1 habe ich übernommen, jedoch wird folgende Ausgabe jeweils generiert"
Die Ausgabe, welche mit deinem Code bei mir generiert wird (1:1 übernommen), habe ich dir ja oben bereits gezeigt.

Jedoch, weil du etwas mistrauisch reagiert hast, habe ich noch eine Weile mit dem Vorschlag experimentiert und einen Erfolg erlebt!
Und so funktioniert es:
01.
:M5 
02.
set Name-Suffix_of_Differential-VHD= 
03.
set /p Name-Suffix_of_Differential-VHD=etwas eingeben:  
04.
 
05.
setlocal EnableDelayedExpansion 
06.
echo "!Name-Suffix_of_Differential-VHD!"|findstr /r ".[\\/:*?\"^<^>^|]." 
07.
if "%errorlevel%"=="0" ( 
08.
	echo Ein Dateiname darf keines der folgenden Zeichen enthalten: \/:*?^"^<^>:^| 
09.
	goto :M5 
10.
11.
endlocal


Mit deiner Reihenfolge der Zeichen in der Suche geht es auch: "..*[<>|\\/:?\"].*."
Jedoch so reduziert ebenso: ".[<>|\\/:?\"]."
(Der Schalter /c: kann doch überall erspart werden)

Und an alle:
Was haben wir davon gelernt? Wird die Reihenfolge dieser Sonderzeichen in der Suchzeichenkette getauscht, so müssen einige von denen doch maskiert werden. Da mir dieser Zusammenhang der Sonderzeichen nicht vollständig klar ist (warum, wenn z. B. "<" vorne steht keine Maskierung zwingend notwendig ist (obwohl diese nicht stört) aber wenn das Zeichen hinten seht, dann nur mit Maskierung möglich ist), kann ich noch keine Regel daraus ziehen. Daher wie der rubberman@ oben vorgeschlagen hat einfach experimentieren.

findstr mag anscheinend nicht, wenn bei Verwendung regulärer Ausdrücke noch etwas auf seiner Zeile dahinten steht (und konkret: etwa ">nul" oder "&& echo misst" und sonstiges am Ende, verursacht die fehlerhafte Ausgabe wie oben), daher wurde das Ausweichmanöver mit %ERRORLEVEL% in der nächsten Zeile angewendet.
Das einzige Problem, das eventuell jemanden bei so einem ähnlichen Vorhaben stören könnte, ist also dass bei der Eingabe dieser unerwünschten Sonderzeichen die Rückmeldung findstr mit >nul nicht unterdrückt werden kann. Für das momentane Vorhaben ist dies natürlich überhaupt nicht störend, da die Eingabe von Sonderzeichen ja ein Sonderfall ist. Wenn es jedoch umgekehrt sein sollte, dann wird es sicherlich sehr spannend die richtige Lösung zu finden die Rückmeldung zu unterdrücken…

Gruß
evinben
Bitte warten ..
Mitglied: evinben
25.12.2012 um 13:46 Uhr
Gruß Friemler,

deinen Lösungsvorschlag werde ich gerne im Auge behalten, falls es mit bereits funktionierenden schlanken Batch-Lösung doch zu Engpässe kommen sollte.

Gruß
evinben
Bitte warten ..
Mitglied: pieh-ejdsch
25.12.2012, aktualisiert 29.12.2012
moin,

einen hab ich noch - eine Alternative:
01.
@echo off 
02.
 
03.
:Eingabe 
04.
set /p "X=Dateiname Eingeben: " ||goto :Eingabe 
05.
setlocal enabledelayedexpansion 
06.
for /f tokens^=2delims^=\/:*?^<^>^|^" %%i in (" !x! ") do endlocal&echo Falsche Eingabe&goto :Eingabe 
07.
if !os! equ %OS% endlocal 
08.
echo rem Hier gehts weiter. 
09.
 
10.
pause
Gruß Phil
Bitte warten ..
Mitglied: evinben
26.12.2012 um 13:59 Uhr
Hallo Phil,

deine Lösung…. ja.., die funktioniert.... Ich blicke zwar nicht durch, und konkret warum in (" !x! ") unbedingt zwei Leerzeichen sein müssen und wie du überhaupt drauf gekommen bist, wenn laut den Regeln von FOR-Schleife dies eigentlich völlig egal sein sollte …? Und so etwas, wie tokens^=2delims^= (also ohne die Optionen der FOR-Schleife in Anführungszeichen und die Maskierungen schon vor dem Gleichheitszeichen zu setzen), hat mich per Knockout lahmgelegt…
Das was mich am meisten sehr verwirrt sind die ausergewöhnlichen Tricks, die du hier rausgrabst… Du warst bestimmt an der Entwicklung von FOR.EXE beteiligt, stmimmt's ?
Weil eigentlich offiziell es so sein soll:
FOR /F ["Optionen"] %Variable IN (Dateiensatz) DO Befehl [Parameter]
FOR /F ["Optionen"] %Variable IN ("Zeichenfolge") DO Befehl [Parameter]
FOR /F ["Optionen"] %Variable IN (Befehl) DO Befehl [Parameter]

oder, unter Verwendung der Option "usebackq":

FOR /F ["Optionen"] %variable IN (`Befehl`) DO Befehl [Parameter]

Jetzt haben wir dich erwischt...

Danke sehr!

Gruß
evinben
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Maskieren von Anführungszeichen in CMD
Frage von Marc92Batch & Shell4 Kommentare

Guten Tag, ich habe folgendes Problem und hoffe, dass mir jemand weiterhelfen kann. Wir haben ein Ticketsystem im Einsatz ...

Batch & Shell
Autoit: Befehl ausführen mit Anführungszeichen
gelöst Frage von adminstBatch & Shell1 Kommentar

Hallo zusammen Ich hoffe ihr könnt mir weiterhelfen. Der Befehl welcher ich ausführen muss ist folgender: c:\ProgramData\div\Citrix\CitrixReceiverEnterprise_3-4\CitrixReceiverEnterprise_3.4.201.exe ADDLOCAL="ICA_Client,PN_Agent" SERVER_LOCATION=" ...

Batch & Shell
CMD Befehl mit Anführungszeichen - Syntax Error
gelöst Frage von agowa338Batch & Shell7 Kommentare

Hallo, Ich kämpfe gerade mit der Syntax eines etwas komplexeren Befehls, der Befehl ist folgender: cmd.exe /C "schtasks /create ...

Batch & Shell
Anführungszeichen in Batch Datei ausgeben
gelöst Frage von AtalicsBatch & Shell6 Kommentare

Guten Abend Leute, ich wollte eine Verknüpfung per CMD erstellen (Code von bastla, funktioniert ohne meine Veränderungen einwandfrei ^^), ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 15 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 20 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 20 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Windows XP
Windows XP Aktivieren geht nicht
Frage von tetikmiroWindows XP13 Kommentare

Hallo Ich habe einen Windows XP mit einen vCenter Converter umgezogen auf eine ESXI. Soweit funktioniert dies auch ohne ...

Blogs
Immer wiederkehrende PHP Fehlermeldung bei Wordpress UTF-8 - ASCII
gelöst Frage von vcdweltBlogs11 Kommentare

Hi, seit einiger Zeit wird mein error_log meines Wordpress Blogs mit immer der gleichen Fehlermeldung überschwemmt. 14-Dec-2017 08:18:05 UTC ...

Switche und Hubs
Redundante L2 LWL Leitung über 2 Standorte - Spanning Tree - HP Equipment
gelöst Frage von ResolvSwitche und Hubs10 Kommentare

Hallo, ich stehe vor der Herausforderung eine Redundante L2 LWL Leitung über 2 Standorte herzustellen. Grundsätzliches Switching Know How ...