Dieser Beitrag ist schon älter. Bitte vergewissern Sie sich, dass die Rahmenbedingungen oder der enthaltene Lösungsvorschlag noch dem aktuellen Stand der Technik entspricht.

Liste von Verzeichnissen auf Existenz überprüfen, ggf anlegen

Mitglied: Sisyphusloughs

elegantere Konstruktion gesucht für Wiederholungen von "if exists c:\test mkdir c:\test"

Hi,

ich habe ein Skript, mit dem eine Reihe von Verzeichnissen erstellt werden sollen, wenn sie noch nicht existieren (1). Außerdem möchte ich überprüfen, ob das Erstellen des Verzeichnisses erfolgreich war (2), und schlussendlich, ob -- falls der Ordner schon existiert, das Skript, den Ordner betreten darf (3). Die Verzeichnisse werden in Variablen zuvor festgelegt, und es kann leider sein, dass Leerzeichen enthalten sind.

So sieht mein Ansatz aus:

Statt diesen Schnipsel ungefähr 15 mal zu schreiben (sicher es geht, aber schön finde ich das nicht), wollte ich dieses Schnipsel über eins Schleife aufrufen lassen. Inspiriert von einem anderen Beitrag hier, dachte ich an eine for-Schleife.

1.
Wie gehe ich mit dem Inhalt der in-Klammer in (%order1% %ordner2% %ordner2%) um. Mir ist nicht klar, wie ich tokens und delims sicher setze, damit ich die Leerzeichen nicht zusätlziche Tokens erzeugen.

2.
Aber schon mit einem Eintrag habe ich Probleme. Zunächst hielt ich /r (weil es ja um Verzeichnisse geht) für die Lösung:

Probleme kriege ich in Zeile 5. Nach mehreren Versuchen, bin ich aber mit meinem Latein am Ende. Ich erhalte in dieser Zeile nur Fehlermeldungen:
Zeile 3 Zeile 5 liefert Bemerkung
for/f set "DirToChk=%1" "Die Datei "c:\batch" kann nicht gefunden werden. Ok, /f steht ja für File, also sagen wir ihm, wir suchen nach Verzeichnissen
for/r set "DirToChk=%~p1" ""\batch\c:\"" ist syntaktisch an dieser Stelle nicht verarbeitbar. /r ist für Verzichnisse dokumentiert, ~p für kompletten Prad. Aber die Reihenfolge ist eigenartig.
for/d set "DirToChk=%~p1" ""\"" ist syntaktisch an dieser Stelle nicht verarbeitbar.
for set "DirToChk=%1" ""c:\batch"" ist syntaktisch an dieser Stelle nicht verarbeitbar. ok, ohne Anführungszeichen?
for set DirToChk=%1 ""c:\batch"" ist syntaktisch an dieser Stelle nicht verarbeitbar. es bleibt dabei

Mir fällt jetzt nichts mehr ein... Kann mir jemand helfen?
Gruß,
Sisiphus

Content-Key: 101914

Url: https://administrator.de/contentid/101914

Ausgedruckt am: 30.07.2021 um 21:07 Uhr

Mitglied: Sisyphusloughs
Sisyphusloughs 15.11.2008 um 20:56:13 Uhr
Goto Top
OK,

ich habe einen Fehler gefunden. Und zwar hat sich in Zeile 6 ein Fehler eingeschlichen. Es sollte natürlich exist statt exists heißen. Leider konnte ich der Dos-Shell nicht entnehmen, in welcher Zeile der Fehler lag. mit for ohne weitere Option klappt zumindest der Aufruf.

Gruß, sisiphus
Mitglied: bastla
bastla 15.11.2008 um 23:10:09 Uhr
Goto Top
Hallo sisiphus!

Es gibt natürlich mehrere Möglichkeiten, die Verzeichnisliste festzulegen:

Wenn es nur wenige Verzeichnisse sind, direkt in der "for"- (ohne "/f" oder "/r") Schleife:
Das geht natürlich auch, wie schon in Deinem Entwurf dargestellt, über eine Variable:

Ansonsten eignet sich eher eine Auflistung in einer Datei, wobei dies auch der Batch selbst sein kann (entsprechend der seinerzeit in BASIC verwendeten DATA-Zeile):
Hier werden aus der Batchdatei (%0) alle Zeilen, welche mit "REM DATA" beginnen, herausgesucht und wie folgt zerlegt: Leerzeichen (und TAB) ist das Default-Trennzeichen, sodass "token" Nr 1 das "REM" enthält (was uns aber überhaupt nicht interessiert), "token" Nr 2 dem "DATA" entspricht und als %%i zur Verfügung stünde (brauchen wir zwar auch nicht, ist aber erforderlich zur "Abgrenzung" vom Rest) und alles Weitere in der Zeile (ohne weitere Unterteilung = mitsamt Leerzeichen) als "token" Nr 3 in %%j ankommt.

Wenn es eine externe Parameterdatei auch tut, dann zB
wobei in diesem Fall in der Datei "D:\Verzeichnisse.txt" nur einfach je Zeile ein Verzeichnispfad (mit oder ohne umgebende Anführungszeichen) steht.
In allen Fällen sorgt die Schreibweise "%%~i" dafür, dass (durch ~) bereits vorhandene Anführungszeichen entfernt werden, aber dann auf jeden Fall (auch, wenn es vorher noch keine Anführungszeichen gab) der "fertige" Pfad von Anführungszeichen umgeben ist, womit Du ein definiertes Ergebnis erhältst.
Beim Überprüfen auf Existenz wäre noch zu beachten, dass ein "if exist" auch Dateien berücksichtigt, daher besser etwas ausführlicher (und wegen der größeren Flexibilität in einem Unterprogramm) checken:
Noch zur Schreibweise
Diese entspricht
und bedeutet, dass bei einem Errorlevel größer 0 nach der Ausführung von "Anweisung1" die "Anweisung2" ausgeführt wird.

Grüße
bastla

P.S.: Mit der Verwendung der "Tabellen"-Formatierung hast Du Dir aber Mühe gegeben und das sehr schön dargestellt. :-) face-smile
Mitglied: Sisyphusloughs
Sisyphusloughs 15.11.2008 um 23:24:00 Uhr
Goto Top
Hallo bastla,

ich bin mal wieder begeistert.

Danke auch für den Hinweis, dass "exist" auch Dateien berücksichtigt. Da wäre ich schön auf die Nase gefallen!

Nochmals Tausend Dank!
Gruß, sisiphus
Mitglied: bastla
bastla 15.11.2008 um 23:25:32 Uhr
Goto Top
Hallo sisiphus!

Freut mich, wenn's hilft. :-) face-smile

Grüße
bastla
Heiß diskutierte Beiträge
general
Telekom hat größere Störung gelöst anteNopeVor 1 TagAllgemeinInformationsdienste30 Kommentare

Moin, es scheint als hätte die Telekom gerade eine größere Störung. Bei vielen Kunden mit Telekom-Internetanschluss funktionieren Office 365 und auch IMAP-Mails nicht. Wartezeit in ...

question
Windows 365SarekHLVor 1 TagFrageWindows 1112 Kommentare

Hallo zusammen, nun ist es also soweit - Microsoft stellt mit "Windows 365" die Weichen in Richtung Windows as a Service: Wenn Microsoft da schreibt ...

question
Massive Probleme mit Windows Suche, Taskbar, Windows Standard Apps auf jedem Windows 10-PC im Firmennetzwerkrznr666Vor 1 TagFrageWindows 1027 Kommentare

Hallo liebe Community, die PCs in unserem Unternehmen weisen folgende Probleme auf. Die Fehler treten nach einiger Zeit auf JEDEM Windows 10-PC auf, der genaue ...

question
Absicherung Exchange ServerLKleemannVor 1 TagFrageExchange Server10 Kommentare

Hallo zusammen, wir sind bei uns in der Firma nun endlich vom Exchange POP3 Connector weggekommen und empfangen nun unsere E-Mail direkt über MX-Einträge. Nun ...

question
Anmeldeprobleme w10 auf server2012fisch56Vor 1 TagFrageWindows Server16 Kommentare

Hallo allerseits, mich bringt es fast um. Server 2012R, 7 Arbeitsstationen, alle haben einen Zugriff auf den Server, dort sind 2 Programme, alles läuft easy. ...

report
Erfahrungsbericht Vodafone - All your Verträge belong to us!anteNopeVor 1 TagErfahrungsberichtFlatrates11 Kommentare

Hallo zusammen, da the-buccaneer so nett gebeten hat, hier eine weitere Erfahrung mit und von Voodoofone. Es begab sich zur Zeit zu Weihnachten vor 3 ...

info
Happy System Administrator Appreciation Day0xFFFFVor 14 StundenInformationHumor (lol)7 Kommentare

Guten Morgen Byteschubser, ihr seid die superhelden der Wirtschaft! _Danke dass es euch (uns #eigenlob) gibt. Mögen Eure Systeme stets Viren- und Hackerfrei bleiben, eure ...

question
Robocopy - FEHLER 0 (0x00000000)emeriksVor 1 TagFrageBatch & Shell10 Kommentare

Hi, habe ich hier einen täglichen Copy Job, wo Robocopy plötzlich "Fehler 0" meldet, dass es erfolgreich sei, aber nichts kopiert. Festplatte des NAS ist ...