Un exemple plus avancé :
⍟ arguments illimités.
⍟ existent sur le système de fichiers (soit file
o directory
?) ou un générique string
.
⍟ spécifier si c'est un fichier
⍟ specify is a directory
⍟ no extensions, fonctionnerait dans les scripts hérités !
⍟ code minimal ☺
@echo off
:loop
::-------------------------- has argument ?
if \["%~1"\]==\[""\] (
echo done.
goto end
)
::-------------------------- argument exist ?
if not exist %~s1 (
echo not exist
) else (
echo exist
if exist %~s1\\NUL (
echo is a directory
) else (
echo is a file
)
)
::--------------------------
shift
goto loop
:end
pause
✨ d'autres choses..✨
■ dans %~1
- le ~
supprime tout emballage "
o '
.
■ dans %~s1
- le s
fait que le chemin soit DOS 8.3 naming
ce qui est une bonne astuce pour éviter les espaces dans le nom du fichier lors de la vérification (et de cette façon, il n'est pas nécessaire d'entourer 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, donc à la place l'expression utilise des parenthèses et l'original non modifié %1
(juste sans le "
l'emballage, le cas échéant )
s'il n'y a pas d'arguments ou si nous avons utilisé shift
et que le pointeur de la liste d'arg a dépassé le dernier, l'expression sera évaluée à [""]==[""]
.
■ c'est le plus spécifique que vous pouvez être sans utiliser plus d'astuces (cela fonctionnerait même dans les batch-scripts de Windows-95...).
■ exemples d'exécution
l'enregistrer comme identifier.cmd
il peut identifier un nombre illimité d'arguments (normalement vous êtes limité à %1
- %9
), n'oubliez pas d'entourer les arguments de guillemets, ou d'utiliser le nommage 8.3, ou encore de les glisser-déposer (il fait automatiquement l'une ou l'autre de ces opérations).
cela vous permet d'exécuter les commandes suivantes :
⓵ identifier.cmd c:\windows
et pour obtenir
exist
is a directory
done
⓶ identifier.cmd "c:\Program Files (x86)\Microsoft Office\OFFICE11\WINWORD.EXE"
et pour obtenir
exist
is a file
done
⓷ et des arguments multiples (bien sûr, c'est tout le problème..)
identifier.cmd c:\windows\system32 c:\hiberfil.sys "c:\pagefile.sys" hello-world
et pour obtenir
exist
is a directory
exist
is a file
exist
is a file
not exist
done.
naturellement, cela peut être beaucoup plus complexe, mais les bons exemples doivent toujours être simples et minimaux. :)
J'espère que cela aidera tout le monde :)
publié ici : <a href="http://icompile.eladkarako.com/cmd-unlimited-arguments-identifying-directory-file-or-none/" rel="noreferrer">CMD Ninja - Traitement des arguments illimités, identification de l'existence d'un système de fichiers, identification d'un fichier ou d'un répertoire</a>
et voici un exemple fonctionnel 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) : <a href="http://icompile.eladkarako.com/mass-apk-installer-wo-adb-install-multi/" rel="noreferrer">Faire du post précédent un installateur APK de masse qui n'utilise pas la syntaxe Install-Multi de ADB</a>
0 votes
Duplicata possible de Quelle est la bonne façon de tester si un paramètre est vide dans un fichier batch ?
1 votes
@double-beep - La question ici (par daniel-fortunov) a été posée en premier, environ un an avant que la question à laquelle vous faites référence ne soit postée. Quel est le doublon (possible) ?
1 votes
@KevinFegan parce que l'autre question a plus de vues et plus de réponses.