Может ли командный файл Windows определять собственное имя файла?
Например, если я запустил командный файл C: \ Temp \ myScript.bat, есть ли в myScript.bat команда, которая может определить строку «myScript.bat»?
windows
batch-file
cmd
djangofan
источник
источник
%0
это то, что вы ищете. См. [Этот вопрос] [1] для получения дополнительной информации. [1]: stackoverflow.com/questions/357315/…Ответы:
Да.
Используйте специальную
%0
переменную, чтобы получить путь к текущему файлу.Напишите,
%~n0
чтобы получить только имя файла без расширения.Напишите,
%~n0%~x0
чтобы получить имя файла и расширение.Также можно написать,
%~nx0
чтобы получить имя файла и расширение.источник
cd
сначала%cd%
вернет текущий каталог процесса, вызвавшего пакетный файл. Итак, если вы в приглашенииD:\dir1
и войдетеY:\foo\bar.bat
, еслиbar.bat
есть,@echo %cd%
то он будет выводитьсяD:\dir1
.Вы можете получить имя файла, но вы также можете получить полный путь, в зависимости от того, что вы поместите между "% ~" и "0". Сделайте свой выбор из
Например, изнутри c: \ tmp \ foo.bat
%~nx0
выдает "foo.bat", а%~dpnx0
дает "c: \ tmp \ foo.bat". Обратите внимание, что части всегда собираются в каноническом порядке, поэтому, если вы проявите симпатию и попытаетесь%~xnpd0
, вы все равно получите "c: \ tmp \ foo.bat"источник
f
это имя файла, но в примерах вы используете егоn
в качестве имени файла. После некоторого тестирования кажется, чтоf
это полный путь иn
имя файла.%~xnpd0
» ... Я люблю тебя.Используя следующий сценарий, основанный на ответе SLaks, я определил, что правильный ответ:
А вот и мой тестовый сценарий:
Что мне интересно, так это то, что % nx0 не будет работать, учитывая, что мы знаем, что символ '~' обычно используется для удаления / обрезки кавычек из переменной.
источник
Имейте в виду, что
0
это особый случай номеров параметров внутри командного файла, где0
означает этот файл, указанный в командной строке .Итак, если это файл myfile.bat, вы можете вызвать его несколькими способами, как показано ниже, каждый из которых даст вам другой результат использования
%0
или%~0
:myfile
myfile.bat
mydir\myfile.bat
c:\mydir\myfile.bat
"c:\mydir\myfile.bat"
Все вышеперечисленное является законным вызовом, если вы вызываете его из правильного относительного места в каталог, в котором он существует.
%~0
удаляет кавычки из последнего примера, тогда как%0
нет.Потому что все они дают разные результаты,
%0
и%~0
вряд ли вы действительно захотите использовать.Вот командный файл для иллюстрации:
источник
Попробуйте запустить пример ниже, чтобы почувствовать, как работают магические переменные.
Соответствующие правила следующие.
источник
Ниже мой исходный код:
Я заметил, что имя файла, заданное% ~ 0 и% 0, - это то, как оно было введено в командной оболочке, а не то, как этот файл фактически назван. Поэтому, если вы хотите использовать буквальный регистр для имени файла, вы должны использовать% ~ n0. Однако при этом не будет учитываться расширение файла. Но если вы знаете имя файла, вы можете добавить следующий код.
Я узнал, что ": ~ 8,4%" означает начало с 9-го символа переменной, а затем показать следующие 4 символа. Диапазон составляет от 0 до конца переменной строки. Так что% Path% будет очень длинным!
Однако это не так хорошо, как решение Джула (% ~ x0) выше.
Мои доказательства:
Вот окончательный код
источник