найти путь текущей папки – cmd

Я использую этот скрипт, чтобы узнать текущую папку с ее .bat-файлом:

for /f %%i in ("%0") do set curpath=%%~dpi echo %curpath% 

он не работает правильно, если путь содержит пробелы (D: \ Scripts \ All Scripts -> извлекает только D: \ Scripts \, если я помещаю в папку, путь которой не имеет пробелов, он извлекает полный путь) , Как я могу это исправить?

3 Solutions collect form web for “найти путь текущей папки – cmd”

2015-03-30: Отредактировано – добавлена ​​отсутствующая информация

Чтобы получить текущий каталог, вы можете использовать динамическую переменную %cd% которая содержит текущий активный каталог

 set "curpath=%cd%" 

Это генерирует значение с окончанием обратного слэша для корневого каталога и без обратной косой черты для остальных каталогов. Вы можете принудительно и заканчивать обратную косую черту для любого каталога с помощью

 for %%a in ("%cd%\") do set "curpath=%%~fa" 

Или вы можете использовать другую динамическую переменную: %__CD__% , которая вернет текущий активный каталог с завершающим обратным слэшем.

Кроме того, помните, что переменная %cd% может иметь прямое значение. В этом случае возвращаемое значение не будет текущим каталогом, а назначенным значением. Вы можете предотвратить это со ссылкой на текущий каталог

 for %%a in (".\") do set "curpath=%%~fa" 

До Windows XP переменная %__CD__% имеет такое же поведение. Он может быть перезаписан пользователем, но, по крайней мере, из окон 7 (я не могу проверить его на Vista), любое изменение на %__CD__% разрешено, но когда переменная читается, измененное значение игнорируется, а правильный ток извлекается активный каталог (примечание: измененное значение все еще отображается с помощью команды set ).

НО все предыдущие коды вернут текущий активный каталог , а не каталог, в котором хранится пакетный файл .

 set "curpath=%~dp0" 

Он вернет каталог, в котором хранится командный файл, с завершающим обратным слэшем.

НО это не сработает, если в пакетном файле используется команда shift

 shift echo %~dp0 

По мере смещения аргументов командного файла ссылка %0 на текущий пакетный файл теряется.

Чтобы предотвратить это, вы можете получить ссылку на пакетный файл перед любым переключением или изменить синтаксис на shift /1 чтобы гарантировать, что операция переключения начнется с первого аргумента, не затрагивая ссылку на пакетный файл. Если вы не можете использовать какие-либо из этих параметров, вы можете получить ссылку на текущий пакетный файл при вызове подпрограммы

 @echo off setlocal enableextensions rem Destroy batch file reference shift echo batch folder is "%~dp0" rem Call the subroutine to get the batch folder call :getBatchFolder batchFolder echo batch folder is "%batchFolder%" exit /b :getBatchFolder returnVar set "%~1=%~dp0" & exit /b 

Этот подход также может потребоваться, если при вызове имя файла партии указано и полная ссылка не используется (читайте здесь ).

 for /f "delims=" %%i in ("%0") do set "curpath=%%~dpi" echo "%curpath%" 

или

 echo "%cd%" 

Двойные кавычки необходимы, если путь содержит любые символы.

Использовать этот код

 @echo off :: Get the current directory for /f "tokens=* delims=/" %%A in ('cd') do set CURRENT_DIR=%%A echo CURRENT_DIR%%A 

(echo this Для подтверждения этого кода работает отлично)

  • Вызовите функцию внешним приложением, не открывая новый экземпляр Matlab
  • Назначение вывода программы переменной
  • Как наложить два аудиофайла с помощью ffmpeg
  • Как запускать несколько команд DOS параллельно?
  • Каковы значения ERRORLEVEL, установленные внутренними командами cmd.exe?
  • Get 'spawn cmd ENOENT' при попытке создать приложение Кордовы (event.js: 85)
  • Какие внутренние команды cmd.exe очищают ERRORLEVEL до 0 при успешном завершении?
  • Что означает% ~ dp0 и как оно работает?
  • Логические операторы ("и", "или") в партии DOS
  • Как пакетный файл запускает программу и задает положение и размер windows?
  • пакет окон SET внутри IF не работает
  • Давайте будем гением компьютера.