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 Windows Batch - Drag and Drop - prüfen ob Parameter leer

Mitglied: zimbosmurf

zimbosmurf (Level 1) - Jetzt verbinden

08.05.2017 um 12:57 Uhr, 661 Aufrufe, 2 Kommentare, 1 Danke

Hallo!

Ich habe ein Batch-Skript für eine Backuproutine entworfen, das aufgerufen werden soll, indem man einen Ordner auf das Skript zieht. Aus diesem Ordner wird dann das Backup in das laufende System zurückgespielt.

Eleganterweise würde ich gerne prüfen, ob das Skript wirklich per Drag and Drop gestartet wurde oder einfach per Doppelklick. In letzterem Fall (Kein Parameter) soll das Skript eine Fehlermeldung ausgeben und sich beenden.

Mein erster Versuch war der folgende:
01.
@Echo off
02.
if %1=="" goto fehler
03.
Echo Alles ist gut, das Skript wird jetzt weiter ausgeführt!
Die Bedingung wird aber nie true, denn es wird 'nichts' mit einem String verglichen, der aus zwei Anführungszeichen besteht.

Also habe ich in einem nächsten Versuch das ganze mit Anführungszeichen um die %1 abgeändert:
01.
@Echo off
02.
if "%1"=="" goto fehler
03.
Echo Alles ist gut, das Skript wird jetzt weiter ausgeführt!
Jetzt bricht das Skript korrekt ab, wenn kein Parameter ausgegeben wurde, arbeitet korrekt, wenn ein einfacher Pfad übergeben wird, steigt aber aus, wenn ein Pfad mit Leerzeichen übergeben wird, denn der Pfad mit Leerzeichen kommt als "c:\Pfad mit Leerzeichen" (und die Anführungszeichen sind Teil des Strings!) in der Batch-Datei an und der Vergleich lautet dann
01.
if ""c:\Pfad mit Leerzeichen""=="" goto fehler
und bei den doppelten Anführungszeichen steigt cmd aus.

Nächste Idee: Naja, dann strippe ich halt die Anführungszeichen aus dem Parameter weg, bevor ich vergleiche Ich brauche ihn nachher sowieso ohne die Anführungszeichen, weil ich an den Pfad noch Strings anhängen möchte um gezielt Unterpfade anzusprechen:
01.
@Echo off
02.
set config_path=%1
03.
set config_path=%config_path:"=%
04.
if "%config_path%"=="" goto fehler
05.
Echo Alles ist gut, das Skript wird jetzt weiter ausgeführt!
Jetzt klappt alles wunderbar, wenn ich Pfade mit oder ohne Leerzeichen übergebe, dafür steigt cmd aus, wenn ich mit einem Doppelklick ohne Parameter starte, denn aus dem nicht vorhandenen Parameter wird durch den Versuch zu strippen
01.
"=
und dadurch endet mein Vergleich als
01.
if ""="=="" goto fehler
und ich habe wieder ein doppeltes Anführungszeichen und cmd steigt aus.

Nächster Versuch ist der folgende:
(ziemlich von hinten durch die Brust!)
01.
@echo off
02.
set config_path=%1
03.
set config_path=#%config_path%#
04.
if %config_path%==## goto fehler
05.
set config_path=%config_path:"=%
06.
set config_path=%config_path:#=%
Diese Variante funktioniert jetzt endlich in allen drei Varianten! An einen Pfad, egal ob mit oder ohne Leerzeichen und Anführungszeichen, werden vorne und hinten die # angehängt, ein leerer Parameter wird somit zu ## und der Vergleich funktioniert, danach werden beim Pfad die # und Anführungszeichen wieder weggestrippt. Problem: der # (und viele andere Zeichen, die ich stattdessen verwenden könnte, auch) darf auch ganz normal in einem Ordner- oder Dateinamen vorkommen. Ist zwar unwahrscheinlich, aber nicht unmöglich.

Aktuell letzter Versuch war dann der folgende, sehr ähnliche:
01.
@echo off
02.
set config_path=%1
03.
if #%config_path%#==## goto fehler
04.
set config_path=%config_path:"=%
Der funktioniert jetzt endlich so, wie ich es mir erhoffe, macht auch keine Probleme, wenn das # im Pfad steckt und scheint mir die praktikabelste Lösung zu sein. Schön finde ich es trotzdem nicht.

Meine Frage:
Gibt es für dieses - ja eigentlich nicht ungewöhnliche - Problem nicht eine elegantere Lösung? Bin ich zu doof, um das offensichtliche zu sehen?
Mitglied: zimbosmurf
08.05.2017 um 13:57 Uhr
Da ist das offensichtliche! Super! Vielen Dank!

Und Danke für die verlinkte Übersicht!
Bitte warten ..
Ähnliche Inhalte
Windows Server
Server Spinnt, Drag drop
gelöst Frage von dax4funWindows Server5 Kommentare

Tag Freunde, Windows 2008 r2 : Seit einiger Zeit Schalten sich einige Sachen wie Drag & Drop, Copy Paste ...

Batch & Shell
Drag and Drop in Powershell
gelöst Frage von mc-doubleyouBatch & Shell2 Kommentare

Hallo zusammen, inwischen habe ich mich von cmd zur Powershell vorgearbeitet, die Lösungen die mir Google aber so liefert ...

Outlook & Mail
Outlook 2013 Drag and Drop geht nicht
Frage von Mungo-SOutlook & Mail1 Kommentar

Hallo zusammen PC Notebook Surface mit Win 10 und Office 2013, Domäne-PC, Exchange-Konto Problem: Drag and Drop geht nicht, ...

Visual Studio

GridView mit Drag-n-Drop oder vergleichbares

gelöst Frage von Aicher1998Visual Studio7 Kommentare

Guten Abend, nachdem ich bereits seit 4 Tagen an einem UserControl in C# getüftelt hab, aber nichts brauchbares geschafft ...

Neue Wissensbeiträge
Server-Hardware
Verkaufe NEUE Hp Ethernet 10gb 2port 530t Adapter
Information von lroeske vor 5 StundenServer-Hardware7 Kommentare

Hallo zusammen, Wer Interesse an einem oder mehreren Adaptern hat kann sich gerne bei mir melden, sind alle orginalverpackt ...

Verschlüsselung & Zertifikate

Extended Validation Certificates are (Really, Really) Dead

Information von Dani vor 2 TagenVerschlüsselung & Zertifikate

Moin all, sehr interessanter Artikel zu EV SSL/TLS- Zertifikate von Troy Hunt: Gruß, Dani

Humor (lol)
Das IoT wird schlimmer
Erfahrungsbericht von Henere vor 4 TagenHumor (lol)8 Kommentare

Nun auch schon über den WSUS:

Sicherheit

Win10 1809 und höher erlauben nun das Sperren und Whitelisten von bestimmten Geräten

Tipp von DerWoWusste vor 5 TagenSicherheit1 Kommentar

Vor 1809 konnten nur Geräteklassen gesperrt werden, nun können endlich einzelne Device instance IDs gewhitelistet werden (oder andersherum: gesperrt ...

Heiß diskutierte Inhalte
Netzwerke
Suche schnelleren VPN-Router für IPSec-Verbindung und zusätzlichem S0-Port für TK-Anlage, um Fritzbox zu ersetzen
Frage von TomSEE01Netzwerke36 Kommentare

Hallo, ich bin neu hier im Forum. Und zwar hätte ich folgende Frage, ich benötige eine VPN-Server Fähige Firewall/Router, ...

Schulung & Training
Was sollte man im Helpdesk bzw Service Desk 1st Level wissen
Frage von loubertSchulung & Training28 Kommentare

Hallo zusammen, ich fange demnächst in einem IT-Systemhaus meinen neuen Job im IT-Helpdesk (UHD), 1st Level (für externe Kunden,) ...

Netzwerkmanagement
Netzwerksegmentierung eines 16bit Kundennetzes
Frage von Locke2016Netzwerkmanagement21 Kommentare

Hallo lieber IT Mitstreiter, ich habe folgendes Problem bei einem Kunden, der ein grosses /16 Netz hat und bei ...

Server
Suche günstigen Server für erste Schritte mit Microsoft Windows Server 2016 + Exchange
gelöst Frage von vodaviServer19 Kommentare

Hallo zusammen, ich bin auf der Suche nach einem preiswerten, aber guten Server. Mir geht es darum, dass ich ...