63 votes

Invite de commande Windows : comment obtenir la sortie d'une commande dans une variable d'environnement ?

Je veux avoir une variable d'environnement qui contient le jour de la semaine dans cmd.exe.

Lorsque j'exécute cette commande, j'obtiens le résultat que je souhaite.

C:\Users\tisc> powershell (get-date).dayofweek
Friday

Ici, j'essaie de stocker le résultat dans une variable d'environnement.

C:\Users\tisc> set dow = powershell (get-date).dayofweek

Mais quand j'essaie de l'obtenir, je n'obtiens pas la chaîne que je voulais.

C:\Users\tisc> set dow
DoW=0
dow = powershell (get-date).dayofweek

Mon objectif est d'utiliser la variable dans un fichier batch pour certains scripts de sauvegarde.

1voto

user109923 Points 21

En fait, lorsque l'on met quelque chose comme ce qui suit dans un fichier .ps1 (disons, t.ps1 ) et l'appeler depuis une session CMD avec PowerShell -File t.ps1 ... cela fonctionne bien.

$DateAndTime = (get-date -UFormat "%Y%m%d_%H%M%S")[Environment]::SetEnvironmentVariable("DateAndTime", $DateAndTime, "Machine")

Mais pas pour la session CMD à partir de laquelle le script de t.ps1 a été appelé. Dans une nouvelle session CMD on obtient :

D:> echo %DateAndTime% ==> 20120208_123106

Je suppose que nous devons trouver comment faire quelque chose comme export T=date dans une session CMD.

0voto

Rifat Points 3394

Si vous souhaitez que votre fichier batch accède aux variables d'environnement qui sont définies par une commande PowerShell exécutée à partir de ce fichier batch, vous pouvez utiliser la solution de contournement suivante :

Faites en sorte que votre script PowerShell crée un sous-fichier batch, mysub.bat qui contient des lignes "set variable=value", et exécutez ce fichier batch mysub.bat à partir du fichier batch principal juste après la commande PowerShell.

Utilisez la méthode WriteAllLines plutôt que les méthodes de sortie par défaut de PowerShell afin que le fichier sous-batch ne soit pas généré avec le format d'encodage UTF-8.

Exemple

main.bat :

REM main.bat first line
powershell -Command "[System.IO.File]::WriteAllLines(\".\mysub.bat\", \"set VARIABLE=VALUE\");"
.\mysub.bat
echo VARIABLE=%VARIABLE%
REM expected output: VARIABLE=VALUE

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X