it-swarm.com.ru

Получить текущий каталог пакетных файлов

Во-первых, я видел эта тема но я не мог этого понять.

Вопрос:

В D:\path\to\file.bat есть пакетный файл со следующим содержимым:

echo %cd%
pause

Результат:

C:\

Это должен быть D:\path\to

Что я делаю неправильно?

234
Hamed Kamrava

Системная переменная только для чтения %CD% хранит путь к вызывающей стороне пакета, а не местоположение файла пакета.

Вы можете получить имя самого пакетного сценария, введенное пользователем с помощью %0 (например, scripts\mybatch.bat). Расширения параметров можно применить к этому, поэтому %~dp0 вернет диск и путь к пакетному сценарию (например, W:\scripts\), а %~f0 вернет полный путь (например, W:\scripts\mybatch.cmd).

Вы можете ссылаться на другие файлы в той же папке, что и пакетный скрипт, используя этот синтаксис:

CALL %0\..\SecondBatch.cmd

Это может даже использоваться в подпрограмме, Echo %0 даст метку вызова, но echo "%~nx0" даст вам имя файла пакетного сценария.

Когда переменная %0 раскрывается, результат заключается в кавычки.

Подробнее о параметрах партии .

440
Stoleg

Очень просто:

setlocal
cd /d %~dp0
File.exe
105
shay

В вашем файле .bat:

set mypath=%cd%

Теперь вы можете использовать переменную %mypath% для ссылки на путь к файлу .bat. Чтобы проверить правильность пути:

@echo %mypath%

Например, файл с именем DIR.bat со следующим содержимым

set mypath=%cd%
@echo %mypath%
Pause

запустить из каталога g:\test\bat отобразит этот путь в командном окне DOS.

23
rockerron

Вот что я использую в верхней части всех моих командных файлов. Я просто копирую/вставляю из моей папки с шаблонами.

@echo off
:: --HAS ENDING BACKSLASH
set batdir=%~dp0
:: --MISSING ENDING BACKSLASH
:: set batdir=%CD%
pushd "%batdir%"

Установка пути к текущему пакетному файлу в% batdir% позволяет вам вызывать его в последующих командах stmts в текущем пакетном файле, независимо от того, где изменяется этот пакетный файл. Использование PUSHD позволяет вам использовать POPD, чтобы быстро установить путь этого пакетного файла к исходному% batdir%. Помните, что если вы используете% batdir% ExtraDir или% batdir%\ExtraDir (в зависимости от того, какая версия использовалась выше, заканчивая обратной косой чертой или нет), вам нужно заключить всю строку в двойные кавычки, если путь содержит пробелы (то есть "% batdir% ExtraDir" ). Вы всегда можете использовать PUSHD% ~ dp0. [https: // ss64.com/ nt/syntax-args .html] содержит больше параметров (% ~).

Обратите внимание, что использование (: :) в начале строки делает ее строкой комментария. Что еще более важно, использование :: позволяет вам включать в этот комментарий перенаправители, каналы, специальные символы (т. Е. <> | И т.д.).

:: ORIG STMT WAS: dir *.* | find /v "1917" > outfile.txt

Конечно, Powershell делает это и многое другое.

1
Wendell Holmes