2012-06-07 4 views
1

Мне нужно найти имя папки командного файла, который я выполняю. Все другие подходы обеспечивают мне полный путь. Мне нужно только имя родительской папки. Кроме того, другие подходы mentioned используют цикл, который довольно длинный и подробный для моих нужд. Есть ли способ узнать имя родительской папки непосредственно через параметры% (или их комбинации)?Поиск имени папки .bat-файла

+0

возможного дубликат [.bat текущего имени папки] (http://stackoverflow.com/questions/3848597/ bat-current-folder-name) –

+0

Этот вопрос имеет принятый ответ, который был снабжен итерацией. Я ищу параметр/любой другой подход, который не является длительным. –

+0

Посмотрите на второй ответ. (Принятый ответ часто является не единственной полезной информацией.) –

ответ

2

Прямой ответ на ваш вопрос: «Нет». Нет прямого метода, использующего только модификаторы расширения без использования цикла FOR или CALL.

Связанная нить в вашем вопросе в значительной степени имеет все, что вам нужно.

Вот два оптимизированных метода, которые очень похожи на то, что уже было опубликовано. Method1 должен быть самым быстрым:

Редактировать - я оптимизирована путем удаления операции подстроки.
Edit2 - я заменял простой FOR вместо FOR/F

@echo off 
setlocal 

::method 1 using FOR 
for %%F in ("%~p0\.") do set "method1=%%~nxF" 
if not defined method1 set method1=\ 

::method 2 using CALL 
call :getName "%~p0\." method2 

::print results 
set method 
exit /b 

:getName PathWithTrailing\. ReturnVar 
set "%~2=%~nx1" 
if not defined %~2 set %~2=\ 
exit /b 
+0

Спасибо за разъяснение этого. Второй подход - тот, который более полезен для моего случая. –

+1

@SumitBisht - Я говорил слишком рано. Мне удалось устранить необходимость в операции подстроки, добавив '\ .' в полный путь. Ответ был обновлен. – dbenham

+0

@SumitBisht - Также изменился FOR/F на простой FOR – dbenham

1

Попробуйте

echo %~dp0 

в файле летучей мыши. % 0 - имя командного файла. ~ dp дает вам диск и путь к указанному аргументу.

+0

Нет, это было упомянуто ранее. Выполняя это, я получаю весь путь. Мне нужна только родительская папка. например: C: \ myprogram \ bin \ myfile.bat => выходы bin –

1

Существует действительно простой способ сделать это. Я знаю, что вы сказали, что вы не хотите, пространный подхода захвата петли, так вот краткое перекручивание подход:

for %%D in (.) do @echo %%~nD 

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

Вы должны зарегистрироваться Rob van der Woude's scripting pages. У него много хорошей информации для сценариев DOS на его сайте.

Смежные вопросы