Un exemple plus avancé:
⍟ arguments illimités.
⍟ existe sur un système de fichiers (soit file
ou directory
?) Ou un générique string
.
⍟ spécifier si est un fichier
⍟ spécifier est un répertoire
⍟ pas d' extensions, fonctionnerait dans les scripts hérités!
⍟ code minimal ☺
@Écho off
:boucle
:: -------------------------- a un argument?
si ["% ~ 1"] == [""] (
écho fait.
aller à la fin
)
:: -------------------------- argument existe?
s'il n'existe pas% ~ s1 (
l'écho n'existe pas
) autre (
l'écho existe
s'il existe% ~ s1 \ NUL (
echo est un répertoire
) autre (
echo est un fichier
)
)
:: --------------------------
décalage
aller en boucle
:fin
pause
✨ d'autres trucs..✨
■ in %~1
- le ~
supprime tout emballage "
ou '
.
■ in %~s1
- the s
crée le chemin DOS 8.3 naming
, ce qui est une bonne astuce pour éviter les espaces dans le nom du fichier lors de la vérification des éléments (et de cette façon, il n'est pas nécessaire d'envelopper la ressource avec plus de "
s.
■ le ["%~1"]==[""]
"ne peut pas être sûr" si l'argument est un fichier / répertoire ou juste une chaîne générique encore, donc à la place l'expression utilise des crochets et l'original non modifié %1
(juste sans le "
wrapping, le cas échéant ..)
s'il n'y avait aucun argument de si nous avons utilisé shift
et que le pointeur arg-list a passé le dernier, l'expression sera évaluée [""]==[""]
.
■ c'est aussi spécifique que vous pouvez l'être sans utiliser plus d'astuces (cela fonctionnerait même dans les scripts batch de Windows-95 ...)
■ exemples d'exécution
enregistrez-le sous identifier.cmd
il peut identifier un nombre illimité d'arguments (normalement vous êtes limité à %1
- %9
), rappelez-vous simplement de placer les arguments avec des virgules inversées, ou d'utiliser un nom 8.3, ou de les glisser-déposer (il fait automatiquement l'une des deux ci-dessus).
cela vous permet d'exécuter les commandes suivantes:
⓵ identifier.cmd c:\windows
et pour obtenir
exister
est un directeur
terminé
⓶ identifier.cmd "c:\Program Files (x86)\Microsoft Office\OFFICE11\WINWORD.EXE"
et pour obtenir
exister
est un fichier
terminé
⓷ et de multiples arguments (bien sûr, c'est l'affaire complète ..)
identifier.cmd c:\windows\system32 c:\hiberfil.sys "c:\pagefile.sys" hello-world
et pour obtenir
exister
est un directeur
exister
est un fichier
exister
est un fichier
n'existe pas
terminé.
naturellement, cela peut être beaucoup plus complexe,
mais les bons exemples doivent toujours être simples et minimaux. :)
J'espère que cela aide n'importe qui :)
publié ici: CMD Ninja - Traitement illimité des arguments, identifiant s'il existe dans le système de fichiers, identifiant si un fichier ou un répertoire
et voici un exemple de travail qui prend n'importe quelle quantité de fichiers APK (applications Android) et les installe sur votre appareil via la console de débogage (ADB.exe):
Faites de l'article précédent un programme d'installation APK de masse qui n'utilise pas la syntaxe ADB Install-Multi