Le comportement de la variable% CD% diffère lorsque vous cliquez avec le bouton droit et utilisez run as admin

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%