5 votes

Est-il possible d'attribuer une valeur à l'ensemble (non pas setx) de la valeur %path% sur Windows 10?

Voici les commandes dans mon fichier batch setpath.bat

set workdir="%cd%"

timeout 30

set path="C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;"

timeout 30

Chaque fois que j'exécute ce batch dans cmd.exe sur mon windows 10, je reçois cette erreur

E:\>setpath.bat

E:\>set workdir="E:\"

E:\>timeout 30

Waiting for 29 seconds, press a key to continue ...

E:\>set path="C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;"

E:\>timeout 30
'timeout' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.

Je suis conscient que set modifie les valeurs d'environnement de la coque actuelle (la fenêtre) et que le changement est immédiatement disponible, mais temporaire ; alors que setx modifie la valeur de manière permanente, ce qui affecte toutes les coques futures mais ne modifie pas l'environnement des coques déjà exécutées.

J'aimerais juste savoir si je peux attribuer une valeur à la valeur d'environnement %path% sur Windows 10, afin de pouvoir exécuter une commande à l'intérieur de la coque immédiatement.

Voici une autre expérience avec ces commandes

echo %path%

set workdir="%cd%"

timeout 30

set path="C:\Windows\system32;"

echo %path%

timeout 30

C:\Windows\system32\timeout 30

et cette sortie

E:\>setpath.bat

E:\>echo E:\Miniconda3\condabin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;E:\Miniconda3;E:\Miniconda3\Scripts;E:\Miniconda3\Library\bin;C:\Users\AlbertD\AppData\Local\Microsoft\WindowsApps;e:\Program Files\JetBrains\PyCharm Community Edition 2020.3\bin
E:\Miniconda3\condabin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;E:\Miniconda3;E:\Miniconda3\Scripts;E:\Miniconda3\Library\bin;C:\Users\AlbertD\AppData\Local\Microsoft\WindowsApps;e:\Program Files\JetBrains\PyCharm Community Edition 2020.3\bin

E:\>set workdir="E:\"

E:\>timeout 30

Waiting for 30 seconds, press a key to continue ...

E:\>set path="C:\Windows\system32;"

E:\>echo "C:\Windows\system32;"
"C:\Windows\system32;"

E:\>timeout 30
'timeout' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.

E:\>C:\Windows\system32\timeout 30

Waiting for 29 seconds, press a key to continue ...

E:\>

ce qui signifie que la coque actuelle ne peut pas trouver timeout.exe même s'il n'y a qu'une seule valeur pour la variable %path%, cependant, l'appeler par le chemin complet fonctionne bien.

J'ai fait beaucoup d'autres expériences, y compris set path="%workdir%;%path%", aucun d'entre eux ne fonctionne.

0 votes

@Ramhound Ce que j'essaie de définir est exactement la même valeur que celle d'origine dans le système.

0 votes

@Ramhound non, ce sont les guillemets. Ils ne devraient pas être là. Path le traite littéralement, donc il définit la première entrée sur "C:\windows\system32, ce qui n'existe bien sûr pas. Puisque timeout.exe se trouve dans c:\windows\system32, ce chemin est exclu et donc la commande n'est pas trouvée.

0 votes

@LPChip - Ma prochaine suggestion aurait été d'utiliser where timeout, cela aurait échoué pour les raisons que vous avez décrites, ce qui aurait clairement indiqué que c'étaient les guillemets. Je savais que quelque chose n'allait pas, mais je ne pouvais pas l'identifier.

5voto

LPChip Points 53736

Vous avez "" dans votre chemin. Ils ne doivent pas être ajoutés.

Essayer

set path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;

Aussi, pourquoi ne pas modifier le chemin comme ceci ?

set path=C:\mydir;%path% 

cela garantit que votre chemin conserve tous les paramètres de chemin d'origine et n'ajoute que ce que vous voulez ajouter...

3voto

iTwasnTme Points 5586

Vous envisagez peut-être également d'utiliser setlocal et endlocal

Démarre la localisation des variables d'environnement dans un fichier batch. La localisation continue jusqu'à ce qu'une commande endlocal correspondante soit rencontrée ou que la fin du fichier batch soit atteinte.*

Remarques

Si vous utilisez setlocal en dehors d'un script ou d'un fichier batch, cela n'a aucun effet. Utilisez setlocal pour changer les variables d'environnement lorsque vous exécutez un fichier batch. Les modifications de l'environnement effectuées après l'exécution de setlocal sont locales au fichier batch. Le programme Cmd.exe restaure les paramètres précédents lorsqu'il rencontre une commande endlocal ou atteint la fin du fichier batch.

Vous pouvez avoir plus d'une commande setlocal ou endlocal dans un programme batch (c'est-à-dire des commandes imbriquées).


  • Vous pouvez également utiliser des variables système pour définir votre chemin "alternative" :

    rem :: %~DP0% == > Drive + Path d'où votre fichier bat se trouve rem :: %CD% rem :: %Windir% rem :: %AppDir% rem :: %ProgramFiles% rem :: %ProgramFiles(x86)% rem :: %AppData:Roaming=Local% == > Remplacer Roaming par Local dans : %Userprofile%\AppData\Roaming à %Userprofile%\AppData\Local


for %%i in ("%~DP0%","%__CD__%","%Windir%","%__AppDir__%","%ProgramFiles%","%ProgramFiles(x86)%","%AppData:Roaming=Local%")do echo\%%~i
  • Résultats :

    F:\Q1615715\ F:\Q1615715\ C:\WINDOWS C:\Windows\System32\ C:\Program Files C:\Program Files (x86) C:\Users\ecker\AppData\Local


  • Rem. : Utilisez **_""_** dans votre set **_"_**path=....stringes;stringes;...**"** seulement :

     ↧                                                             ↧

    set "path=%AppDir%;%Windir%;%AppDir%Wbem;....\WindowsApps;"


@echo off

setlocal

set "workdir=%__CD__%"

timeout 30

set "path=%__AppDir__%;%Windir%;%__AppDir__%Wbem;%__AppDir__%WindowsPowerShell\v1.0\;%ProgramFiles(x86)%\NVIDIA Corporation\PhysX\Common;%ProgramFiles%\NVIDIA Corporation\NVIDIA NvDLISR;%AppData:Roaming=Local%\Microsoft\WindowsApps;"

echo.votre chemin alternatif et actuel %path%

echo\%path:;=&echo\%

timeout 30

endlocal

echo.votre système et le chemin actuel %path%

echo\%path:;=&echo\%
  • Sorties :

    En attente de 0 secondes, appuyez sur une touche pour continuer ...

    votre chemin alternatif et actuel %path%

    C:\Windows\System32\ C:\WINDOWS C:\Windows\System32\Wbem C:\Windows\System32\WindowsPowerShell\v1.0\ C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR C:\Users\ecker\AppData\Local\Microsoft\WindowsApps

    En attente de 0 secondes, appuyez sur une touche pour continuer ...

    votre système et le chemin actuel %path%

    C:\Program Files\Python39\Scripts\ C:\Program Files\Python39\ C:\Python38\Scripts\ C:\Python38\ C:\Program Files\ImageMagick-7.0.10-Q16-HDRI C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64_win\mpirt C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\ia32_win\mpirt C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64_win\compiler C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\ia32_win\compiler C:\Program Files (x86)\Common Files\Oracle\Java\javapath C:\WINDOWS\system32 C:\WINDOWS C:\WINDOWS\System32\Wbem C:\WINDOWS\System32\WindowsPowerShell\v1.0\ C:\WINDOWS\System32\OpenSSH\ C:\Program Files (x86)\QuickTime\QTSystem\ C:\Program Files\dotnet\ C:\Program Files\Microsoft SQL Server\130\Tools\Binn\ C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\ C:\Program Files\nodejs\ C:\ProgramData\chocolatey\bin C:\Program Files\Microsoft VS Code\bin C:\Program Files (x86)\Gpg4win..\GnuPG\bin C:\Program Files (x86)\Sennheiser\SenncomSDK\ C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR C:\Program Files (x86)\HP\IdrsOCR_15.2.10.1114\ C:\Program Files\Git\cmd C:\Program Files (x86)\PDFtk\bin\ C:\Ruby30-x64\bin C:\Users\ecker\AppData\Local\Microsoft\WindowsApps C:\Users\ecker\AppData\Roaming\npm C:\Users\ecker.dotnet\tools


0 votes

Le chemin pour ..\AppData\Local est stocké dans %localappdata%

0 votes

@LPChip Oui, mais, cette partie du code vise à montrer à l'OP qu'il peut également utiliser une substitution de sous-chaîne dans la commande set, même si cela se trouve à l'intérieur ou à l'extérieur d'une boucle

0 votes

@PChip Il ne vise pas à informer toutes les variables accessibles dans le système...

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