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

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

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

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

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 Для подтверждения этого кода работает отлично)

  • Как запустить файл bat в фоновом режиме из другого файла bat?
  • Откройте URL-адрес без использования браузера из пакетного файла
  • Команда вывода CMD
  • Назначение вывода программы переменной
  • Почему (или когда) Rscript (или littler) лучше, чем R CMD BATCH?
  • Командная строка Windows для чтения первой строки из текстового файла
  • Как пакетный файл запускает программу и задает положение и размер windows?
  • Как создать таймер пакетного файла для выполнения / вызова другой партии в течение дня
  • Логические операторы ("и", "или") в партии DOS
  • Арифметические операции с HH: MM: SS раз в пакетном файле
  • Get 'spawn cmd ENOENT' при попытке создать приложение Кордовы (event.js: 85)
  • Interesting Posts

    Сохранять p: диалог открывается, когда возникает ошибка проверки после отправки

    Есть ли декомпилятор Visual Basic 6?

    Получение «типа или имени пространства имен не удалось найти», но все выглядит нормально?

    Возможно ли одновременная загрузка двух ОС одновременно?

    Как получить html div на другой странице с помощью jQuery ajax?

    Более подробный отчет для панели iTunes «Capacity» для iPhone / iPod

    Разрешить загрузку JSON-файлов в Visual Studio Express 2013 для Интернета

    Могу ли я настроить таргетинг на: перед или: после псевдоэлемента с помощью сочетания братьев и сестер?

    Каковы правила сортировки по символам?

    Как читать значение частного поля из другого classа в Java?

    Http получить из оболочки в Mac OS X

    Перейти к определению функции в vim

    Перенаправление определенных запросов URL-адресов на локальный сайт

    Angular 2 скачать PDF из API и отобразить его в представлении

    Android-Ошибка: выполнение не выполнено для задачи ‘: app: transformClassesWithDexForRelease’

    Давайте будем гением компьютера.