Во-первых, я видел эту тему, но я не мог этого понять.
Вопрос:
Существует пакетный файл D:\path\to\file.bat
со следующим содержимым:
echo %cd%
pause
Выход:
C:\
Это должно быть D:\path\to
Что я делаю не так?
windows
batch-file
working-directory
Хамед Камрава
источник
источник
Ответы:
Системная переменная только для чтения
%CD%
хранит путь к вызывающей стороне пакета, а не местоположение файла пакета.Вы можете получить имя самого пакетного сценария, введенное пользователем
%0
(напримерscripts\mybatch.bat
). К нему можно применить расширения параметров, поэтому%~dp0
вернет диск и путь к пакетному сценарию (напримерW:\scripts\
) и%~f0
вернет полный путь (напримерW:\scripts\mybatch.cmd
).Вы можете ссылаться на другие файлы в той же папке, что и пакетный скрипт, используя этот синтаксис:
Это может даже использоваться в подпрограмме,
Echo %0
даст метку вызова, ноecho "%~nx0"
даст вам имя файла пакетного сценария.Когда
%0
переменная раскрывается, результат заключается в кавычки.Подробнее о параметрах партии .
источник
stm.sql
вD:\Dir1\Dir2\stm.sql
. Мне нужноmysql.exe -u root -p mysql < %cd%\stm.sql
выполнить команды stm.sql.*.bat
или*.sh
?D:\Dir1\Dir2\batchfile.bat
иD:\Dir1\Dir2\stm.sql
. Содержимое batchfile.bat:mysql.exe -u root -p mysql < D:\Dir1\Dir2\stm.sql
и содержимое stm.sql - это некоторые команды MySQL.echo %~dp0
вернет путь к местоположению партии.echo %~f0
вернет путь к пакету с именем файла.Очень просто:
источник
cd /d %~dp0
качестве первой строки командный файл и работалВ вашем файле .bat:
Теперь вы можете использовать переменную
%mypath%
для ссылки на путь к.bat
файлу. Чтобы проверить правильность пути:Например, файл вызывается
DIR.bat
со следующим содержимымзапустить из каталога
g:\test\bat
будет отображать этот путь в окне команд DOS.источник
Вот что я использую в верхней части всех моих командных файлов. Я просто копирую / вставляю из моей папки с шаблонами.
Установка пути к текущему пакетному файлу в% batdir% позволяет вам вызывать его в последующих командах stmts в текущем пакетном файле, независимо от того, где изменяется этот пакетный файл. Использование PUSHD позволяет вам использовать POPD, чтобы быстро установить путь этого пакетного файла к исходному% batdir%. Помните, что если вы используете% batdir% ExtraDir или% batdir% \ ExtraDir (в зависимости от версии, использованной выше, с обратной косой чертой или без нее), вам нужно заключить всю строку в двойные кавычки, если путь содержит пробелы (то есть «% batdir% ExtraDir» ). Вы всегда можете использовать PUSHD% ~ dp0. [https: // ss64.com/ nt / syntax-args .html] содержит больше параметров (% ~).
Обратите внимание, что использование (: :) в начале строки делает ее строкой комментария. Что еще более важно, использование :: позволяет вам включать редиректоры, каналы, специальные символы (т. Е. <> | И т. Д.) В этот комментарий.
Конечно, Powershell делает это и многое другое.
источник
set batdir=%CD%
). Это не нормально, потому что это путь к вызывающей стороне, а не сам файл bat. Единственный действительный способ получить путь к исполняемому файлу bat - это%~dp0
.