Un ejemplo más avanzado:
⍟ argumentos ilimitados.
⍟ existe en el sistema de archivos ( ¿ file
o directory
?) O genérico string
.
⍟ especificar si es un archivo
⍟ especificar es un directorio
⍟ sin extensiones, ¡funcionaría en scripts heredados!
⍟ código mínimo ☺
@echo apagado
:lazo
:: -------------------------- tiene argumento?
si ["% ~ 1"] == [""] (
echo hecho.
ir al final
)
:: -------------------------- argumento existe?
si no existe% ~ s1 (
eco no existe
) más (
el eco existe
si existe% ~ s1 \ NUL (
echo es un directorio
) más (
echo es un archivo
)
)
:: --------------------------
cambio
Ir a bucle
:final
pausa
✨ otras cosas..✨
■ en %~1
: ~
elimina cualquier envoltorio "
o '
.
■ in %~s1
- the s
hace que la ruta sea DOS 8.3 naming
, lo cual es un buen truco para evitar espacios en el nombre de archivo mientras verifica cosas (y de esta manera no es necesario envolver el recurso con más "
s.
■ el ["%~1"]==[""]
"no puedo estar seguro" si el argumento es un archivo / directorio o simplemente una cadena genérica todavía, por lo que en su lugar la expresión usa corchetes y el original sin modificar %1
(solo sin el "
ajuste, si lo hay ..)
si no hubo argumentos de si lo hemos usado shift
y el puntero de lista de argumentos ha pasado el último, la expresión se evaluará como [""]==[""]
.
■ esto es lo más específico que puede ser sin usar más trucos (funcionaría incluso en los scripts por lotes de Windows-95 ...)
■ ejemplos de ejecución
guárdalo como identifier.cmd
puede identificar un número ilimitado de argumentos (normalmente está limitado a %1
- %9
), solo recuerde envolver los argumentos con comas invertidas, o use la denominación 8.3, o arrástrelos y suéltelos (automáticamente hace cualquiera de los anteriores).
esto le permite ejecutar los siguientes comandos:
⓵ identifier.cmd c:\windows
y para conseguir
existe
es un directorio
hecho
⓶ identifier.cmd "c:\Program Files (x86)\Microsoft Office\OFFICE11\WINWORD.EXE"
y para conseguir
existe
es un archivo
hecho
⓷ y múltiples argumentos (por supuesto, este es el problema ..)
identifier.cmd c:\windows\system32 c:\hiberfil.sys "c:\pagefile.sys" hello-world
y conseguir
existe
es un directorio
existe
es un archivo
existe
es un archivo
no existe
hecho.
naturalmente, puede ser mucho más complejo,
pero los buenos ejemplos siempre deben ser simples y mínimos. :)
Espero que ayude a alguien :)
publicado aquí: CMD Ninja - Procesamiento ilimitado de argumentos, identificación de si existe en el sistema de archivos, identificación de archivo o directorio
y aquí hay un ejemplo de trabajo que toma cualquier cantidad de archivos APK (aplicaciones de Android) y los instala en su dispositivo a través de la consola de depuración (ADB.exe):
Haga de la publicación anterior un instalador masivo de APK que no use ADB Install-Multi Syntax