J’ai un fichier Windows cmd qui utilise la variable d’environnement% CD% pour déterminer le répertoire d’exécution du fichier cmd.
Lorsque je lance le fichier cmd à partir de la ligne de commande, cela fonctionne correctement, ce qui signifie que la variable% CD% contient le répertoire de travail. Si je double-clique sur le cmd, cela fonctionne aussi comme prévu. Toutefois, si je clique avec le bouton droit de la souris sur le fichier cmd et sélectionnez l’administrateur runas, la variable% CD% contient la valeur “C: \ Windows \ system32” et non le répertoire où la commande cmd s’exécute.
J’ai pu reproduire le problème avec le script suivant:
echo %CD% pause
Essayer d’utiliser %~dp0
au lieu de %cd%
… cela devrait vous donner le répertoire qui contient le script batch (shell NT) qui a été lancé de toute façon.
Êtes-vous déroutant dans le répertoire de travail / actuel avec le répertoire dans lequel se trouve votre fichier de commandes?
Si j’ai un fichier batch simple avec juste
@echo off echo %cd%
et ceci est stocké dans c: \ foo \ bar \ test.cmd
En cmd j’exécute
cd c:\foo bar\test
test.cmd imprimera c:\foo
et non c:\foo\bar
Je suppose que l’UAC utilise system32 car il est possible d’élever avec un utilisateur différent et que cet utilisateur n’a peut-être pas access au répertoire actuel.
Si vous voulez le répertoire dans lequel se trouve votre fichier de commandes, utilisez% ~ dp0, si vous voulez le répertoire actuel, utilisez. ou% CD%