Файлы с тем же путём, где расположен сам bat-файл
@echo off
:: Path to this file itself
set PP=%~dp0
:: Do something on file *doc.txt* which saved in the same folder
do something %PP%doc.txt %*
Файлы с тем же именем, но другим расширением (или без него), что и сам bat-файл
Например, такой bat-файл подходит для запуска bash-скрипта с тем же именем,
но без расширения:
@echo off
set NM=%~n0
bash %NM% %*
Файлы с тем же путём и с тем же именем, что вызывающий bat-файл
@echo off
set PP=%~dp0
set NM=%~n0
:: Run python script with same name as .bat file
python %PP%%NM%.py %*
Пробел в конце переменной
Создать пустую переменную и через пробел подставить её в другую переменную.
set EMPTY=
set NINJA_STATUS=[%%p %%f/%%t] %EMPTY%
ninja %*
Выйти из файла если возникла ошибка в команде
command || echo ERROR && exit /b %errorlevel%
Функции
@echo off
SETLOCAL
CALL :MyFunction 55 , 1
EXIT /B %ERRORLEVEL%
:MyFunction
echo The value of parameter 1 is %~1
echo The value of parameter 2 is %~2
EXIT /B 0
Обработка параметров
Если запустить for /? в командной строке, то там будет,
в том числе, описание расширенной обработки параметров.
Частично эти сведения уже использованы в примерах выше.
Цитата:
Операции подстановки ссылок на переменные команды FOR
также расширены. Допускается применение следующих
синтаксических конструкций:
%~I - из переменной %I удаляются обрамляющие кавычки (")
%~fI - переменная %I расширяется до полного имени файла
%~dI - из переменной %I выделяется только имя диска
%~pI - из переменной %I выделяется только путь к файлу
%~nI - из переменной %I выделяется только имя файла
%~xI - из переменной %I выделяется расширение имени файла
%~sI - полученный путь содержит только короткие имена
%~aI - переменная %I расширяется до атрибутов файла
%~tI - переменная %I расширяется до даты /времени файла
%~zI - переменная %I расширяется до размера файла
%~$ПУТЬ:I - проводится поиск по каталогам, заданным в
переменной среды ПУТЬ, и переменная %I
заменяется на полное имя первого найденного
файла. Если переменная ПУТЬ не определена или
в результате поиска не найден ни один файл,
то этот модификатор заменяется на пустую
строку.
При объединении нескольких операторов можно получить
следующие результаты:
~dpI - переменная I раскрывается в имя диска и путь
~nxI - переменная I раскрывается в имя файла и его
расширение
~fsI - переменная I раскрывается в полный путь с
короткими именами
~dp$ПУТЬ:I - проводится поиск по каталогам, заданным в
переменной среды ПУТЬ, и переменная I
раскрывается в имя диска и путь к первому
найденному файлу.
~ftzaI - переменная I раскрывается в строку, подобную
выдаваемой командой DIR
В приведенных выше примерах переменные I и ПУТЬ можно
заменить на другие допустимые значения. Синтаксическая
конструкция с символами ~ заканчивается допустимым именем
переменной цикла FOR.
Для имен переменных рекомендуется использовать заглавные
буквы, например, I, что делает эту конструкцию более удобной
для чтения и предотвращает ошибочное принятие их за
модификаторы, которые не различают регистр.
Полезные ссылки: https://dl.gsu.by/doc/use/ntcmds.htm, https://github.com/Lifailon/Batch-Commands