Начальный каталог пакетного файла Windows при запуске от имени администратора


У меня есть пакетный файл, который находится в каталоге, и надо бежать оттуда, потому что он обновляет файлы в этом каталоге.
Это работает отлично, за исключением случаев, когда пользователь запускает пакетный файл как администратор (требуется на Vista). Тогда начальный каталог C:WindowsSystem32.

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

6 60

6 ответов:

попробуйте получить доступ к пути пакетных файлов следующим образом:

echo %~dp0

для получения дополнительной информации см. следующую цитату из команды for /? это описывает, как работает приведенная выше команда:

You can now use the following optional syntax:

    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    %~sI        - expanded path contains short names only
    %~aI        - expands %I to file attributes of file
    %~tI        - expands %I to date/time of file
    %~zI        - expands %I to size of file
    %~$PATH:I   - searches the directories listed in the PATH
                   environment variable and expands %I to the
                   fully qualified name of the first one found.
                   If the environment variable name is not
                   defined or the file is not found by the
                   search, then this modifier expands to the
                   empty string

The modifiers can be combined to get compound results:

    %~dpI       - expands %I to a drive letter and path only
    %~nxI       - expands %I to a file name and extension only
    %~fsI       - expands %I to a full path name with short names only
    %~dp$PATH:I - searches the directories listed in the PATH
                   environment variable for %I and expands to the
                   drive letter and path of the first one found.
    %~ftzaI     - expands %I to a DIR like output line

лучше, чем cd и pushd что будет

  • Изменить букву диска Если начиная с D:\...
  • назначьте букву диска, если на сетевом пути UNC

так pushd %~dp0 - это хорошо.

хорошая практика заключается в том, чтобы позвонить popd когда сделано.

Это должно решить вашу проблему, установив рабочий каталог для пакетного файла обратно в текущий каталог:

включить эти две строки в верхней части .bat скрипт:

@setlocal enableextensions
@cd /d "%~dp0"

найдено по адресу: http://www.codeproject.com/Tips/119828/Running-a-bat-file-as-administrator-Correcting-cur

Я использую:

cd %0..

в начале пакетного файла изменить каталог на каталог, в котором был запущен пакетный файл.

-Настюша

вы можете компакт-диск непосредственно из имени файла, добавив Родительский (не проверено в windows 8.x, но работал "навсегда", насколько я помню).

CD %FILENAME%\..

и CD также изменит диски, используя /D, который показан выше, но явно не упоминается, поэтому может быть пропущен. CD / D %FILENAME%\..

(для /? Если /? Установить /? Позвонить /? Гото /? все они обеспечивают очень полезное чтение, если вы используете cmd.отлично, я перечитываю их время от времени.)

рабочее решение здесь:

http://www.vistax64.com/vista-general/79849-run-administrator-changes-default-directory.html

для /F %%I IN ("%0") установите BATDIR=%%~dpI

ECHO пакетный файл находится в каталоге %BATDIR%