Более продвинутый пример:
⍟ неограниченное количество аргументов.
⍟ существует в файловой системе (file
или directory
?) Или универсальный string
.
⍟ указать, является ли файл
⍟ указать каталог
⍟ без расширений, будет работать в устаревших скриптах!
⍟ минимальный код ☺
@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
✨ другие вещи ..✨
■ в %~1
- ~
удаляет любую обертку "
или '
.
■ в %~s1
- s
делает путь равным DOS 8.3 naming
, что является хорошим трюком, позволяющим избежать пробелов в имени файла при проверке содержимого (и, таким образом, нет необходимости переносить ресурс с большим количеством * 1038) * s.
■ ["%~1"]==[""]
«не может быть уверен», если аргумент - это файл / каталог или просто общая строка, поэтому вместо этого выражение использует скобки и исходный неизмененный %1
(просто без переноса "
если есть ..)
если не было аргументов, если мы использовали shift
и указатель arg-list прошел последний, выражение будет оценено как [""]==[""]
.
■ это настолько специфично, насколько это возможно, если не использовать больше трюков (это будет работать даже в пакетных скриптах Windows-95 ...)
■ примеры выполнения
сохранить как identifier.cmd
он может идентифицировать неограниченные аргументы (обычно вы ограничены %1
- %9
), просто не забудьте обернуть аргументы кавычками, или использовать 8.3 именования, или перетаскивать их (автоматически выше).
<Ч />
это позволяет вам запускать следующие команды:
⓵ identifier.cmd c:\windows
и получить
exist
is a directory
done
<Ч />
⓶ identifier.cmd "c:\Program Files (x86)\Microsoft Office\OFFICE11\WINWORD.EXE"
и получить
exist
is a file
done
<Ч />
⓷ и несколько аргументов (конечно, это целая сделка ..)
identifier.cmd c:\windows\system32 c:\hiberfil.sys "c:\pagefile.sys" hello-world
и получить
exist
is a directory
exist
is a file
exist
is a file
not exist
done.
естественно, это может быть намного сложнее,
но хорошие примеры всегда должны быть простыми и минимальными. :)
Надеюсь, это кому-нибудь поможет:)
опубликовано здесь: CMD Ninja - Неограниченная обработка аргументов, идентификация наличия в файловой системе, идентификация файла или каталога
и вот рабочий пример, который берет любое количество APK-файлов (приложений Android) и устанавливает их на ваше устройство через debug-console (ADB.exe):
Сделать предыдущее сообщение массовым установщиком APK, в котором не используется синтаксис ADB Install-Multi