Более продвинутый пример:
⍟ неограниченные аргументы.
⍟ существуют в файловой системе (или 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