Как получить имя родительской папки в командной строке? - PullRequest
2 голосов
/ 09 июня 2010

Я в командной строке Windows и хочу, чтобы родительская папка была в переменной.

Предполагая, что текущим каталогом является "C: \ foo \ bar", как я могу получить значение "bar"?

Я ожидаю что-то вроде «найти последнюю обратную косую черту в CD и все».

И, пожалуйста, никаких ссылок на PowerShell;Я хочу простые старые операции командной строки Windows.

Ответы [ 4 ]

6 голосов
/ 09 июня 2010

Мое решение использует подстановку и также работает с корневым каталогом:

call set PARENT_DIR=%CD%
set PARENT_DIR=%PARENT_DIR:\= %
set LAST_WORD=
for %%i in (%PARENT_DIR%) do set LAST_WORD=%%i
echo %LAST_WORD%
3 голосов
/ 09 июня 2010

Появляется, чтобы получить текущее имя каталога и сохранить его в переменной окружения bar:

for %i in (%CD%) do set bar=%~ni

Это работает, потому что %CD% содержит текущий каталог, а %~n обрезает выводцикла for (цикл для одного значения, %CD%) до части 'имя файла'.

(Обратите внимание, если вы используете это в пакетном файле, используйте %%i и %%~niвместо этого.)

Это, однако, не работает для корневого каталога диска, вместо этого оно будет сброшено bar, так как %~ni будет ничего не вычислять.

1 голос
/ 22 июня 2013

@ pmod ответ (мне не хватает ответа на комментарий) может работать для корневых каталогов, но он не работает, если в именах есть пробелы.

Вот немного улучшенная версия (заменяющая / вместо пробела)перед разделением, затем обратная замена после завершения).

call set PARENT_DIR=%CD%
set PARENT_DIR=%PARENT_DIR: =/%
set PARENT_DIR=%PARENT_DIR:\= %
set LAST_WORD=
for %%i in (%PARENT_DIR%) do set LAST_WORD=%%i
set LAST_WORD=%LAST_WORD:/= %
echo %LAST_WORD%
1 голос
/ 09 июня 2010

Pmod имеет более аккуратное решение; Я не уверен, что мой работает для корневых папок. Но я думал, что включу это здесь, чтобы люди могли его увидеть.

set myPath=%cd%
pushd ..
set parentPath=%cd%
popd
echo myPath = "%myPath%"
echo parentPath = "%parentPath%"
call set myDir=%%myPath:%parentPath%\=%%
echo myDir = "%myDir%"
...