Более продвинутый пример:
⍟ неограниченные аргументы.
⍟ существуют в файловой системе (или file
или directory
?) Или в общем string
.
⍟ укажите, если это файл
⍟ укажите это каталог
⍟ без расширений, будет работать в устаревших скриптах!
⍟ минимальный код ☺
@echo off
: loop
:: -------------------------- есть аргумент?
если ["% ~ 1"] == [""] (
эхо сделано.
перейти к концу
)
:: -------------------------- аргумент существует?
если не существует% ~ s1 (
эхо не существует
) еще (
эхо существует
если существует% ~ s1 \ NUL (
эхо - это каталог
) еще (
эхо это файл
)
)
:: --------------------------
сдвиг
цикл goto
:конец
Пауза
✨ прочее ..✨
■ в %~1
- ~
удаляет любую упаковку "
или '
.
■ in %~s1
- s
делает путь равным DOS 8.3 naming
, что является хорошим трюком, позволяющим избежать пробелов в имени файла при проверке материала (и, таким образом, не нужно оборачивать ресурс дополнительными "
s.
■ ["%~1"]==[""]
«не могу быть уверенным», является ли аргумент файлом / каталогом или просто стандартной строкой, поэтому вместо этого в выражении используются скобки и исходное немодифицированное %1
(только без "
упаковки, если таковая имеется ..)
если не было аргументов, если мы использовали, shift
и указатель на список аргументов прошел последний, выражение будет вычислено [""]==[""]
.
■ это настолько специфично, насколько это возможно, не прибегая к дополнительным уловкам (это будет работать даже в пакетных скриптах Windows 95 ...)
■ примеры исполнения
сохраните это как identifier.cmd
он может идентифицировать неограниченное количество аргументов (обычно вы ограничены %1
- %9
), просто не забудьте заключить аргументы в кавычки, или использовать именование 8.3, или перетащить их поверх (он автоматически выполняет любое из вышеперечисленных).
это позволяет запускать следующие команды:
⓵ identifier.cmd c:\windows
и получить
существует
это каталог
сделано
⓶ identifier.cmd "c:\Program Files (x86)\Microsoft Office\OFFICE11\WINWORD.EXE"
и получить
существует
это файл
сделано
⓷ и несколько аргументов (конечно, в этом вся суть ..)
identifier.cmd c:\windows\system32 c:\hiberfil.sys "c:\pagefile.sys" hello-world
и получить
существует
это каталог
существует
это файл
существует
это файл
не существует
сделано.
естественно, это может быть намного сложнее,
но хорошие примеры всегда должны быть простыми и минимальными. :)
Надеюсь, это поможет кому-нибудь :)
опубликовано здесь: CMD Ninja - Неограниченная обработка аргументов, определение наличия в файловой системе, определение наличия файла или каталога
и вот рабочий пример, который берет любое количество файлов APK (приложений Android) и устанавливает их на ваше устройство через консоль отладки (ADB.exe):
Сделайте предыдущий пост массовым установщиком APK, который не использует синтаксис ADB Install-Multi