(По-перше, я хотів би порекомендувати цей корисний довідковий сайт для пакетної роботи:
http://ss64.com/nt/ )
Тоді ще одне корисне пояснення: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
Змінна% ~ dp0
% ~ Dp0 (це нуль) змінної при посиланні в пакетному файлі Windows , буде розширюватися в г омивається річкою і буквою р АТН цього пакетного файлу.
Змінні% 0-% 9 відносяться до параметрів командного рядка пакетного файлу. % 1-% 9 відносяться до аргументів командного рядка після імені пакетного файла. % 0 відноситься до самого пакетного файлу.
Якщо слідувати символу відсотка (%) за допомогою символу тильди (~), ви можете вставити модифікатор (и) перед номером параметра, щоб змінити спосіб розширення змінної. Модифікатор d розширюється на букву диска, а модифікатор p розширюється до шляху параметра.
Приклад: Скажімо, у вас є каталог на C: під назвою bat_files, і в цьому каталозі є файл, який називається example.bat. У цьому випадку% ~ dp0 (поєднує модифікатори d і p) розшириться на C: \ bat_files.
Перегляньте цю статтю Microsoft для повного пояснення.
Також перегляньте цю тему на форумі .
І більш чітке посилання звідси :
%CmdCmdLine%
поверне весь командний рядок після передачі в CMD.EXE
%*
поверне решту командного рядка, починаючи з першого аргументу командного рядка (у Windows NT 4% * також включає всі провідні пробіли)
%~dn
поверне букву диска% n (n може становити від 0 до 9), якщо% n - допустиме шлях або ім'я файлу (без UNC)
%~pn
поверне каталог% n, якщо% n - дійсний шлях або ім'я файлу (без UNC)
%~nn
поверне ім'я файлу лише% n, якщо% n - дійсне ім'я файлу
%~xn
поверне розширення файлу лише% n, якщо% n - дійсне ім'я файлу
%~fn
поверне повністю кваліфікований шлях% n, якщо% n - дійсне ім'я файлу чи каталогу
ДОДАТИ 1
Щойно знайшов хорошу орієнтир для таємничого ~
оператора тильди.
%~
Рядок називається відсотком тильди оператора. Ви можете знайти його в таких ситуаціях , як: %~0
.
:~
Рядок називається двокрапкою тильди оператора. Ви можете знайти його як %SOME_VAR:~0,-1%
.
ДОДАТИ 2 - 13:12 6.06.2018
%1-%9
зверніться до аргументів командного рядка. Якщо вони не є дійсними значеннями шляху, %~dp1
- %~dp9
всі вони розширяться до того ж значення, що і %~dp0
. Але якщо вони є дійсними значеннями шляху, вони розширяться до власного значення драйвера / шляху.
Наприклад: (batch.bat)
@echo off
@echo ~dp0= %~dp0
@echo ~dp1= %~dp1
@echo ~dp2= %~dp2
@echo on
Виконати 1:
D:\Workbench>batch arg1 arg2
~dp0= D:\Workbench\
~dp1= D:\Workbench\
~dp2= D:\Workbench\
Виконати 2:
D:\Workbench>batch c:\123\a.exe e:\abc\b.exe
~dp0= D:\Workbench\
~dp1= c:\123\
~dp2= e:\abc\