J'ai un fichier de commandes qui est 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 de commandes en tant qu'administrateur (requis sur Vista). Ensuite, le répertoire de départ est C:\Windows\System32.
Y a-t-il un moyen de savoir quand même à partir de quel répertoire le fichier batch a été exécuté?
Je ne veux pas que l'utilisateur entre le répertoire manuellement.
Essayez d’accéder au chemin des fichiers de commandes comme ceci:
echo %~dp0
Pour plus d'informations, voir la citation suivante de la commande for /?
qui décrit le fonctionnement de la commande ci-dessus:
Vous pouvez maintenant utiliser la syntaxe facultative suivante: % ~ I - développe% I en supprimant les guillemets environnants (") % ~ FI - développe% I en un chemin d'accès complet % ~ DI - développe% I en une lettre de lecteur uniquement % ~ pI - étend% I uniquement à un chemin % ~ nI - élargit% I à un nom de fichier uniquement % ~ xI - agrandit% I uniquement à une extension de fichier % ~ sI - le chemin développé contient des raccourcis noms uniquement % ~ aI - étend% I aux attributs de fichier du fichier % ~ tI - étend% I à la date/heure du fichier % ~ zI - agrandit% I à la taille du fichier % ~ $ PATH: I - recherche dans les répertoires répertoriés dans la variable d'environnement PATH Et étend% I au nom complet Du premier nom trouvé . Si le nom de la variable d'environnement n'est pas défini ou si le fichier n’est pas trouvé par la recherche , ce modificateur s’étend alors à la chaîne chaîne vide être combinés pour obtenir des résultats composés: % ~ dpI - étend% I à une lettre de lecteur et à un chemin uniquement % ~ nxI - étend% I à un nom de fichier et à une extension uniquement % ~ fsI - développe% I en un nom de chemin complet avec des noms abrégés uniquement % ~ dp $ PATH: I - recherche dans les répertoires listés dans PATH variable d’environnement pour% I et s’étend au lettre de lecteur et chemin du premier trouvé . % ~ ftzaI - étend% I à une ligne de sortie semblable à DIR
Mieux que cd
est pushd
qui
D:\...
Donc, pushd %~dp0
est bon.
Une bonne pratique consiste alors à appeler popd
une fois terminé.
Cela devrait résoudre votre problème en définissant le répertoire de travail du fichier de commandes dans le répertoire actuel:
Incluez ces deux lignes en haut de votre script .bat:
@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 de commandes pour changer de répertoire en répertoire dans lequel le fichier de commandes 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 fonctionne "pour toujours" pour autant que je me souvienne).
CD %FILENAME%\..
et CD changera également de lecteur en utilisant/D, ce qui est montré ci-dessus mais pas explicitement mentionné, donc peut-être raté . CD/D% FILENAME%\..
(FOR /?IF /?SET /?CALL /?GOTO /?all fournit une lecture très utile si vous utilisez cmd.exe, je les relis de temps en temps. .)