Répertoire de démarrage du fichier batch Windows lorsque 'exécuter en tant qu'administrateur'

J'ai un fichier batch qui se trouve dans un répertoire et doit être exécuté à partir de là aussi car il met à jour les fichiers dans ce répertoire.
Cela fonctionne parfaitement, sauf lorsque l'utilisateur exécute le fichier batch en tant qu'administrateur (requis sur Vista). Alors le répertoire de départ est C:WindowsSystem32.

Existe-t-il un moyen de savoir à partir de quel répertoire le fichier batch a été exécuté?
Je ne veux pas que l'utilisateur entre dans le répertoire manuellement.

60
demandé sur Marc 2009-03-23 12:35:01

6 réponses

Essayez d'accéder au chemin des fichiers batch comme ceci:

echo %~dp0

Pour plus d'informations, consultez la citation suivante de la commande for /? qui décrit le fonctionnement de la commande ci-dessus:

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
83
répondu Martin 2011-02-08 12:55:40

Mieux que cd est pushd qui

  • modifier la lettre de lecteur si à partir de D:\...
  • attribuez une lettre de lecteur sur un chemin réseau UNC

, Donc pushd %~dp0 est bon.

La bonne pratique consiste alors à appeler popd Une fois terminé.

34
répondu Benoit 2011-02-08 12:59:44

Cela devrait résoudre votre problème en rétablissant le répertoire de travail du fichier batch dans le répertoire courant:

Inclure ces deux lignes en haut de votre .script chauve-souris:

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

Trouvé à: http://www.codeproject.com/Tips/119828/Running-a-bat-file-as-administrator-Correcting-cur

23
répondu NMrt 2016-01-31 21:26:12

J'utilise:

Cd % 0..

Au début du fichier batch pour changer le répertoire dans le répertoire où le fichier batch a été démarré.

-Mathew

1
répondu Mathew 2009-06-01 18:55:33

Vous pouvez CD directement à partir du nom de fichier en ajoutant le parent (non testé dans windows 8.x, mais a travaillé "pour toujours" pour autant que je me souvienne).

CD %FILENAME%\..

Et CD changeront également les lecteurs en utilisant /D, qui est montré ci-dessus mais pas explicitement mentionné, donc pourrait être manqué. CD / D % FILENAME%\..

(pour /? Si/? SET /? Appel /? GOTO /? tous fournissent une lecture très utile si vous utilisez cmd.exe, je les relis de temps en temps.)

0
répondu Malcolm 2015-11-20 18:46:25

Une solution de travail ici:

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

Pour / F % % I dans ("%0") définissez BATDIR = % % ~ dpI

ECHO le fichier batch se trouve dans le répertoire % BATDIR %

-1
répondu domotor 2010-10-25 12:29:59