Как получить часть пути к каталогу в командном файле - PullRequest
5 голосов
/ 23 сентября 2011

У меня есть BAT-файл в каталоге

D:\dir1\dir2\getpath.bat

когда я запускаю летучую мышь с кодом ниже, он печатает

D:\dir1\dir2\

я хочу только путь D:\dir1\

Структура каталогов не является фиксированной, требуется полный путь к каталогу, отличный от текущего каталога, в котором находится BAT-файл.

@echo off
SET SUBDIR=%~dp0
ECHO %SUBDIR% 

попытался использовать разделители в цикле for, но это не помогло.

Ответы [ 6 ]

3 голосов
/ 23 сентября 2011
@echo off
setlocal
SET SUBDIR=%~dp0
call :parentfolder %SUBDIR:~0,-1% 
endlocal
goto :eof

:parentfolder
echo %~dp1
goto :eof
1 голос
/ 23 сентября 2011

Если это родительский каталог каталога, в котором вы хотите разместить скрипт, попробуйте следующее:

@echo off
SET batchdir=%~dp0
cd /D "%batchdir%.."
echo %CD%
cd "%batchdir%"

(не проверено, пожалуйста, прокомментируйте, если есть проблемы)

Обратите внимание, чтоконечно, ничего не изменится, если ваш пакет находится в корне вашего диска (как в F:\);) Если вы хотите получить специальный вывод в этом случае, вы должны проверить %CD% против %batchdir% перед эхом.

РЕДАКТИРОВАТЬ: применил патч, см. Комментарий @ RichardA

0 голосов
/ 20 февраля 2014

% ~ dp0 возвращает полную букву диска и путь к текущему пакетному файлу.Это можно использовать в команде FOR для получения частей пути:

При запуске из C:\dir1\dir2\dir3\batch.bat

FOR %%V IN ("%~dp0..\") DO @ECHO %%~dpV

возвращает C:\dir1\dir2\

Это может быть расширеночтобы продолжить движение вверх по маршруту:

FOR %%V IN ("%~dp0..\..\") DO @ECHO %%~dpV

возвращает C:\dir1\

Источник: информация Microsoft о параметрах пакета

0 голосов
/ 31 августа 2012

Это делает одна строка кода: -)

Если вы хотите использовать обратную косую черту, тогда

for %%A in ("%~dp0.") do @echo %%~dpA


Если вы не хотите использовать обратную косую черту,

for %%A in ("%~dp0..") do @echo %%~fA
0 голосов
/ 23 сентября 2011

Вы почти поняли это правильно. Используя% ~ dp0, вы получаете диск + полный путь к вашему .bat, поэтому он также возвращает папку, в которой находится ваш bat-файл.

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

@echo off
CD ..
SET SUBDIR=%CD%
ECHO %SUBDIR%

Если поместить это в скрипт летучей мыши для проверки, добавьте PAUSE на новой строке, чтобы увидеть ваш вывод.

0 голосов
/ 23 сентября 2011
@echo off
SET MYDIR=%cd%
cd %MYDIR%\..
SET MYPARENTDIR=%cd%
cd %MYDIR%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...