2013-04-08 4 views
7

Предположим, я использую пакетный файл и хочу, чтобы он направлялся в папку, расположенную в том же каталоге пакета. Если я не ошибаюсь, вы должны написать «% ~ dp0 \ whateverfoldername». Но нельзя сделать то же самое, просто написав «. \ Whateverfoldername»? Если да, то в чем разница и/или преимущество соответствующей команды?Разница между "% ~ dp0" и ". "?

+1

Возможно, вы можете. Но это будет неудачно, если текущий каталог не там, где вы надеетесь. –

+0

Который был бы результатом запуска в качестве администратора ... таким образом, вы делаете то, что говорит RGuggisberg ниже. Теперь я получаю его lol – user2259606

ответ

17
pushd %~dp0 

часто используется для изменения исходного каталога, из которого была запущена партия. Это очень полезно в новых ОС, когда пользователь может «Запуск от имени администратора», который изменяет текущий каталог для вас! Попробуйте это когда-нибудь. Просто сделайте простую летучую мышь

@echo off 
echo.CD=%CD% 
pushd %~dp0 
echo.CD=%CD% 
pause 

Теперь запустите. Теперь запустите его снова как «Администратор» в Vista, Win 7, Win 8, 2008 Server или 2012 Server. Посмотрите, что произойдет?

+0

Хорошо, это очень помогает, я вижу, почему нужен dp0. Но в чем разница между pushd и cd? – user2259606

+0

Отвечая на вопрос: разница между pushd и cd заключается в том, что pushd сохраняет предыдущую папку/путь для использования командой POPD. POPD Изменяет каталог обратно на путь/папку, которая была недавно сохранена командой PUSHD. Boom. Я люблю тебя, ребята, спасибо! – user2259606

+1

Если вам нужно пройти корень на другой диск, PUSHD работает без проблем, тогда как с CD вам нужно будет либо использовать CD с параметром/d, либо вызвать CD, а затем ввести имя диска. –

3

".\ будет найти относительно каталога CURRENT, следовательно, если вы изменили каталоги с командой CD, то вы будете смотреть на THAT каталог, а не каталог, в котором партии находится.

На самом деле, это нормально, чтобы создать отдельный каталог, который часто называют \batch или, возможно, \belfry для сохранения пакетных файлов. Если ,bat, о котором идет речь, находится на path, он будет расположен. %dp0 даст место .bat.

+0

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