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.
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
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é.
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
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
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.)
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 %