Ein fortgeschritteneres Beispiel:
⍟ unbegrenzte Argumente.
⍟ existieren im Dateisystem (entweder file
oder directory
?) Oder in einem generischen string
.
⍟ Geben Sie an, ob es sich um eine Datei handelt
⍟ angeben ist ein Verzeichnis
⍟ Keine Erweiterungen, würde in Legacy-Skripten funktionieren!
⍟ Minimaler Code ☺
@echo aus
:Schleife
:: -------------------------- hat Argument?
if ["% ~ 1"] == [""] (
Echo fertig.
gehe zum Ende
)
:: -------------------------- Argument vorhanden?
falls nicht vorhanden% ~ s1 (
Echo existiert nicht
) else (
Echo vorhanden
falls vorhanden% ~ s1 \ NUL (
Echo ist ein Verzeichnis
) else (
Echo ist eine Datei
)
)
:: --------------------------
Verschiebung
gehe zur Schleife
:Ende
Pause
✨ andere Sachen..✨
■ in %~1
- das ~
entfernt jegliche Umhüllung "
oder '
.
■ in %~s1
- das s
macht den Pfad DOS 8.3 naming
, was ein guter Trick ist, um Leerzeichen im Dateinamen zu vermeiden, während Dinge überprüft werden (und auf diese Weise muss die Ressource nicht mit mehr "
s umbrochen werden .
■ das ["%~1"]==[""]
"kann nicht sicher sein", ob das Argument noch eine Datei / ein Verzeichnis oder nur eine generische Zeichenfolge ist. Stattdessen verwendet der Ausdruck Klammern und das Original unverändert %1
(nur ohne "
Umbruch, falls vorhanden).
Wenn es keine Argumente dafür gab, ob wir verwendet haben shift
und der Zeiger auf die Argumentliste den letzten übergeben hat, wird der Ausdruck ausgewertet [""]==[""]
.
■ Dies ist so spezifisch, wie Sie es können, ohne weitere Tricks zu verwenden (es würde sogar in den Batch-Skripten von Windows-95 funktionieren ...)
■ Ausführungsbeispiele
Speichern Sie es als identifier.cmd
Es kann eine unbegrenzte Anzahl von Argumenten identifizieren (normalerweise sind Sie auf %1
- beschränkt %9
). Denken Sie jedoch daran, die Argumente mit Anführungszeichen zu versehen oder die 8.3-Benennung zu verwenden oder sie per Drag & Drop zu verschieben (dies geschieht automatisch oben).
Auf diese Weise können Sie die folgenden Befehle ausführen:
⓵ identifier.cmd c:\windows
und zu bekommen
existieren
ist ein Verzeichnis
getan
⓶ identifier.cmd "c:\Program Files (x86)\Microsoft Office\OFFICE11\WINWORD.EXE"
und zu bekommen
existieren
ist eine Datei
getan
⓷ und mehrere Argumente (das ist natürlich die ganze Sache ..)
identifier.cmd c:\windows\system32 c:\hiberfil.sys "c:\pagefile.sys" hello-world
und zu bekommen
existieren
ist ein Verzeichnis
existieren
ist eine Datei
existieren
ist eine Datei
nicht existieren
getan.
Natürlich kann es viel komplexer sein,
aber schöne Beispiele sollten immer einfach und minimal sein. :) :)
Hoffe es hilft jedem :)
hier veröffentlicht: CMD Ninja - Unbegrenzte Argumentverarbeitung, Identifizieren, ob im Dateisystem vorhanden, Identifizieren, ob Datei oder Verzeichnis
und hier ist ein funktionierendes Beispiel, das eine beliebige Anzahl von APK-Dateien (Android-Apps) verwendet und über die Debug-Konsole (ADB.exe) auf Ihrem Gerät installiert:
Machen Sie den vorherigen Beitrag zu einem Massen-APK-Installationsprogramm, das keine ADB Install-Multi-Syntax verwendet