J'ai essayé la commande ci-dessous pour ajouter un chemin à une variable de chemin d'accès système par fichier batch:
setx PATH "%PATH%;C:\Program Files\MySQL\MySQL Server 5.5\bin"
J'ai vérifié le chemin des variables système après avoir exécuté le fichier de commandes ci-dessus, le chemin ci-dessus n'est pas là.
Vous pouvez voir toutes les fenêtres Variable value
contenu ci-dessous:
C:\Program Files (x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\AMDAPP\bin\x86;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\ProgramFiles (x86)\ATI Technologies\ATI.ACE\Core-Static;
Qu'est-ce que je fais mal?
Pour se greffer sur la réponse de @ Endoro (il me manque le représentant pour commenter):
Si vous souhaitez modifier les variables d'environnement à l'échelle du système, vous devez utiliser / M, a la:
setx PATH "%PATH%;C:\Program Files\MySQL\MySQL Server 5.5\bin" /M
setx.exe est pointilleux sur le placement du/M, BTW. Il faut que ce soit à la fin.
AVERTISSEMENT!
setx tronquera la valeur à 1024 caractères.
Si vous l'utilisez pour modifier PATH, vous risquez de gâcher votre système.
Vous pouvez utiliser cet extrait PowerShell pour ajouter quelque chose à votre chemin:
$new_entry = 'c:\blah'
$old_path = [Environment]::GetEnvironmentVariable('path', 'machine');
$new_path = $old_path + ';' + $new_entry
[Environment]::SetEnvironmentVariable('path', $new_path,'Machine');
Dans le cas où vous ne souhaitez pas rajouter une entrée déjà existante, quelque chose comme ça fera l'affaire (voir pour une meilleure version plus bas):
$new_entry = 'c:\blah'
$search_pattern = ';' + $new_entry.Replace("\","\\")
$old_path = [Environment]::GetEnvironmentVariable('path', 'machine');
$replace_string = ''
$without_entry_path = $old_path -replace $search_pattern, $replace_string
$new_path = $without_entry_path + ';' + $new_entry
[Environment]::SetEnvironmentVariable('path', $new_path,'Machine');
Voici une version plus récente que j'utilise maintenant (2017-10-23). Cette version gère correctement les chemins imbriqués. Par exemple. il gère le cas de PATH contenant "c:\tool\foo" et vous voulez ajouter "c:\tool".
$desired_entry = 'C:\test'
$old_path = [Environment]::GetEnvironmentVariable('path', 'machine');
$old_path_entry_list = ($old_path).split(";")
$new_path_entry_list = new-object system.collections.arraylist
foreach($old_path_entry in $old_path_entry_list) {
if($old_path_entry -eq $desired_entry){
# ignore old entry
}else{
[void]$new_path_entry_list.Add($old_path_entry)
}
}
[void]$new_path_entry_list.Add($desired_entry)
$new_path = $new_path_entry_list -Join ";"
[Environment]::SetEnvironmentVariable('path', $new_path,'Machine');
vous ne devriez pas regarder les variables d'environnement système mais vos variables d'environnement utilisateur:
SETX /M Path "%PATH%;%ProgramFiles%\MySQL\MySQL Server 5.5\bin\
Il ajoutera votre chemin vers la variable système
Ne doit jamais utiliser setx pour un chemin, car il est limité à 1024 caractères, comme mentionné.
Pourrait utiliser reg ajouter:
set pathkey="HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment"
for /F "usebackq skip=2 tokens=2*" %%A IN (`reg query %pathkey% /v Path`) do (reg add %pathkey% /f /v Path /t REG_SZ /d "%%B;C:\Program Files\MySQL\MySQL Server 5.5\bin")
ou définissez pathkey = "HKEY_CURRENT_USER\Environment" pour le chemin utilisateur.
Puis pour diffuser le changement:
powershell -command "& {$md=\"[DllImport(`\"user32.dll\"\",SetLastError=true,CharSet=CharSet.Auto)]public static extern IntPtr SendMessageTimeout(IntPtr hWnd,uint Msg,UIntPtr wParam,string lParam,uint fuFlags,uint uTimeout,out UIntPtr lpdwResult);\"; $sm=Add-Type -MemberDefinition $md -Name NativeMethods -Namespace Win32 -PassThru;$result=[uintptr]::zero;$sm::SendMessageTimeout(0xffff,0x001A,[uintptr]::Zero,\"Environment\",2,5000,[ref]$result)}"
J'ai rencontré le même problème lorsque j'ai essayé d'ajouter des variables de chemin d'accès liées à fortran (Eclipse pour c/c ++/fortran)
J'ai essayé SETX/M Path "% PATH%; C:\Users\mahidhai\cygwin64\bin" dans la commande Invite en tant qu'administrateur. J'ai reçu un avertissement disant que les données étaient tronquées à 1024 caractères et stockées.
SOLUTION: Accédez directement au fichier de registre. Exécuter-> regedit Naviguer vers l'environnement
(Chemin complet: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)
Cliquez sur le registre de chemin et ajoutez directement la variable de chemin. Ou supprimez toutes les variables de chemin répétées.
Maintenant, ouvrez l'invite de commande, puis exécutez la même commande setx/M path "% path%"
La variable de chemin peut être liée à C ou C++ ou fortran
Pas de soucis lors de la modification du fichier de registre, il sera enregistré de façon permanente, n'ayez pas peur car les variables d'environnement sont dans le gestionnaire de session.