locked
Modification des variables d'environnement TMP et TEMP RRS feed

  • Question

  • Bonjour,

    Après avoir installé Windows 7 64 bits sur un SSD, j'ai lu qu'il était préférable de déplacer les fichiers temporaires vers un disque dur. Pour cela, il faut modifier les variables TEMP et TMP. C'est ce que j'essaye de faire depuis hier pour celles du système et des utilisateurs.

    Mais, ça ne fonctionne pas.

    A chaque fois que je quitte la session puis que j'y reviens, les variables ont repris leurs valeurs par défaut sur C:\....

    J'ai essayé de recréer mon dossier F:\Temp. Ça ne change rien.

    D’où cela vient-il ? Comment y remédier ?

    Merci pour votre aide,

    Ben
    mardi 4 juin 2013 14:08

Réponses

  • Tout dépend de la façon dont tu as voulu modifier ces variables!

    En effet, on peut modifier une variable d'environnement de différentes manières :

    1. par la commande SET :
          SET <nom-de-variable>=<contenu-de-la-variable>
          SET temp=F:\temp
      -> Cette modification est TEMPORAIRE (le temps de la session)
    2. depuis le panneau de configuration Système :
        (clic droit/propriétés sur le poste de travail p.ex.)
              Paramètres système avancés
      ou encore (plus rapide)  en exécutant la commande :
              sysdm.cpl @0,3
      Bouton "Variables d'environnement"
      Variables système" (ou  "Variables utilisateur pour ...")
           Sélectionner "TEMP" (ou TMP)
           Bouton "Modifier"
           Taper la nouvelle valeur
           OK ...  OK ...  OK
      -> Cette modification est PERMANENTE
    3. Depuis la BDR (pour les "accros" !) :
      Valeur commune à tous les comptes :
          HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Temp (ou Tmp)
          (type REG_EXPAND_SZ)
      Valeur spécifique au compte en cours :
          HKCU\Environment\Temp (ou Tmp)
          (type REG_EXPAND_SZ)
      -> Cette modification est PERMANENTE, mais nécessite une réouverture de session
    4. Par programmation (applis ou scripts)
      Exemple :
          Le script ci-dessous ("SetTemp.vbs") sert à affecter à la variable "TEMP" le dossier passé en paramètres

      ----------- couper ici  -----------
      Set Args= Wscript.Arguments
      if args.count=0 then wscript.quit
      Set fso=Wscript.GetObject("Scripting.FileSystemObject")
      Dossier=args(0)
      If not fso.FolderExists(Dossier) then
          Wscript.echo "Le dossier " & Dossier & " n'existe pas!"
          Wscript.quit
          end if
      Set shell = WScript.CreateObject("WScript.Shell")
      Set env=Shell.Environment("system")
      env("TEMP")=Dossier
      ----------- couper ici  -----------

      Exemple d'utilisation :
                cscript h:\outils\scripts\settemp.vbs "c:\trucs à la con\tests\trucmuche"
      (les guillemets sont indispensables s'il y a des espaces dans le nom du dossier)
      -> Cette modification est PERMANENTE, mais nécessite une réouverture de "shell" (nouvelle fenêtre de commandes p.ex.)

     

    mardi 4 juin 2013 14:45
  • Le lundi 10/06/2013 22:39:19, Benoit Lar a écrit dans le message <news:05b84499-f886-4795-994c-5c22e65fdfc8@communitybridge.codeplex.com> ce qui suit :

    J'ai fait la correction. Maintenant, j'ai le message : "d:\Temp\SetTemp.vbs(11,1) Erreur d'execution Microsoft VBScript : Permission refusée."

    A tous les coups tu N'AS PAS LU mes préceptes précédents
    (dans mon message du 06/06 à 10h00) :
         "[...]
          NB: je ne l'ai pas précisé explicitement parce que
          cela va de soi, si on veut modifier une variable
          d'environnement SYSTEME (donc stockée dans
          HKLM\SYSTEM\CurrentControlSet\.....), il faut bien
          évidemment le faire EN TANT QU'ADMINISTRATEUR, sinon
          cela sera refusé par UAC (User Account Control)"

    As-tu lancé le script depuis une fenêtre de comandes ouverte EN TANT QU'ADMINISTRATEUR ?


    May the Force be with You!
    La Connaissance s'accroît quand on la partage
    ----------------------------------------------------------
    Jean-Claude BELLAMY
    http://www.bellamyjc.fr ou http://jc.bellamy.free.fr

    mardi 11 juin 2013 06:57

Toutes les réponses

  • Bonjour,

    Avec les SSD de nouvelles génération ce n'est pas vraiment nécessaire de changer l'emplacement des fichiers temporaire et bien d'autre choses..

    Voici les infos les plus importantes: http://www.revuedugeek.com/post/2010/09/27/Windows-7-Optimisations-SSD

    Si tu veux tout de meme changer l'emplacement, voici la solution: http://answers.microsoft.com/en-us/windows/forum/windows_7-files/change-location-of-temp-files-folder-to-another/19f13330-dde1-404c-aa27-a76c0b450818


    Revue du Geek | Astuces pour déployer Windows 7

    mardi 4 juin 2013 14:25
  • Tout dépend de la façon dont tu as voulu modifier ces variables!

    En effet, on peut modifier une variable d'environnement de différentes manières :

    1. par la commande SET :
          SET <nom-de-variable>=<contenu-de-la-variable>
          SET temp=F:\temp
      -> Cette modification est TEMPORAIRE (le temps de la session)
    2. depuis le panneau de configuration Système :
        (clic droit/propriétés sur le poste de travail p.ex.)
              Paramètres système avancés
      ou encore (plus rapide)  en exécutant la commande :
              sysdm.cpl @0,3
      Bouton "Variables d'environnement"
      Variables système" (ou  "Variables utilisateur pour ...")
           Sélectionner "TEMP" (ou TMP)
           Bouton "Modifier"
           Taper la nouvelle valeur
           OK ...  OK ...  OK
      -> Cette modification est PERMANENTE
    3. Depuis la BDR (pour les "accros" !) :
      Valeur commune à tous les comptes :
          HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Temp (ou Tmp)
          (type REG_EXPAND_SZ)
      Valeur spécifique au compte en cours :
          HKCU\Environment\Temp (ou Tmp)
          (type REG_EXPAND_SZ)
      -> Cette modification est PERMANENTE, mais nécessite une réouverture de session
    4. Par programmation (applis ou scripts)
      Exemple :
          Le script ci-dessous ("SetTemp.vbs") sert à affecter à la variable "TEMP" le dossier passé en paramètres

      ----------- couper ici  -----------
      Set Args= Wscript.Arguments
      if args.count=0 then wscript.quit
      Set fso=Wscript.GetObject("Scripting.FileSystemObject")
      Dossier=args(0)
      If not fso.FolderExists(Dossier) then
          Wscript.echo "Le dossier " & Dossier & " n'existe pas!"
          Wscript.quit
          end if
      Set shell = WScript.CreateObject("WScript.Shell")
      Set env=Shell.Environment("system")
      env("TEMP")=Dossier
      ----------- couper ici  -----------

      Exemple d'utilisation :
                cscript h:\outils\scripts\settemp.vbs "c:\trucs à la con\tests\trucmuche"
      (les guillemets sont indispensables s'il y a des espaces dans le nom du dossier)
      -> Cette modification est PERMANENTE, mais nécessite une réouverture de "shell" (nouvelle fenêtre de commandes p.ex.)

     

    mardi 4 juin 2013 14:45
  • J'ai bien utilisé la méthode 2. Pourtant, dans mon cas, les modifications ne sont pas permanentes... ce qui ne semble pas normal. Je trouve pas pourquoi.
    mardi 4 juin 2013 19:41
  • Le mardi 04/06/2013 21:41:36, Benoit Lar a écrit dans le message <news:2bad1c7a-8775-4180-a668-06f0d5fc2f9c@communitybridge.codeplex.com> ce qui suit :

    J'ai bien utilisé la méthode 2. Pourtant, dans mon cas, les modifications ne sont pas permanentes... ce qui ne semble pas normal. Je trouve pas pourquoi.

    Qu'est-ce qui te fait dire que les modifs ne sont pas permanentes?
    Comment vérifies-tu que la variable a été (ou non) modifiée?

    Car il y a un petit piège !

    P.ex., si tu as ouvert au préalable une fenêtre de commandes, et si tu affiche le contenu des variables d'environnement (par une commande "SET" ou encore par "echo %nom-de-la-variable%"), tu n'auras que les valeurs lors de l'ouverture de la fenêtre de commandes!

    Il n'y a pas de rafraîchissement automatique!

    Si tu modifies (méthode 2) une variable via le panneau de config (par sysdm.cpl @0,3), cette variable sera bien modifiée IMMÉDIATEMENT et de façon PERMANENTE, je suis absolument CATÉGORIQUE!
    MAIS cela n'apparaîtra pas dans la MÊME fenêtre de commandes!

    Il FAUT FERMER cette fenêtre de commandes, puis la ROUVRIR, et de nouveau exécuter une commande SET ou ECHO %...% pour se rendre compte que la variable a bien été modifiée.

    D'ailleurs, si tu as encore des doutes, il suffit d'ouvrir REGEDIT, et contrôler le contenu des variables concernées dans les clefs

    HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\
    HKCU\Environment\

    NB: je ne l'ai pas précisé explicitement parce que cela va de soi, si on veut modifier une variable d'environnement SYSTEME (donc stockée dans HKLM\SYSTEM\CurrentControlSet\.....), il faut bien évidemment le faire EN TANT QU'ADMINISTRATEUR, sinon cela sera refusé par UAC (User Account Control)


    May the Force be with You!
    La Connaissance s'accroît quand on la partage
    ----------------------------------------------------------
    Jean-Claude BELLAMY
    http://www.bellamyjc.fr ou http://jc.bellamy.free.fr

    jeudi 6 juin 2013 08:00
  • Bonjour,

    Je viens de faire de nouveau essai. Mon compte "Benoit" est administrateur.  J'utilise la méthode 2. Je modifie la variable en remplaçant par "D:\Temp". Je quitte la session. J'ouvre la session. Mes modifications sont perdues.

    J'ai essayé la méthode 3 (modification direct de la base de registre). Même chose. A l'ouverture de session, les modifications on disparu.

    Il y a surement autre chose que je fais mal mais je ne sais pas quoi (droit sur le répertoire D:\Temp ?)

    samedi 8 juin 2013 15:19
  • Rectification

    Quand je fais un echo, la variable est bien modifiée

    Par contre, quand j'ouvre les propriété système, elle ne le sont pas !?

    Quand je regarde dans la base de registre, elles sont revenues à l'ancienne valeur C:\windows\temp pour celle du systeme.

    Bref, ça fonctionne mais ça ne fonctionne pas

    samedi 8 juin 2013 15:31
  • Le samedi 08/06/2013 17:31:56, Benoit Lar a écrit dans le message <news:cd194f32-202f-4405-a65b-8642ed82ac6e@communitybridge.codeplex.com> ce qui suit :

    Rectification

    Quand je fais un echo, la variable est bien modifiée

    Par contre, quand j'ouvre les propriété système, elle ne le sont pas !?

    Quand je regarde dans la base de registre, elles sont revenues à l'ancienne valeur C:\windows\temp pour celle du systeme.

    Bref, ça fonctionne mais ça ne fonctionne pas

    ATTENTION !!!!

    En ce qui concerne les variables TEMP et TMP, il existe DEUX environnements : "SYSTEM" et "USER"  !

    Mais quand on exécute dans une fenêtre de commandes la commande :
      echo %variable%

    cela affiche UNIQUEMENT la variable dans l'environnement "USER" (lié au compte en cours, donc stocké dans HKCU\Environment\ ), et non pas celle de SYSTEM!
     je viens d'écrire un petit script VBS qui affiche le contenu de n'importe quelle variable respectivement dans les DEUX environnements SYSTEM et USER :
     fichier "getvar.vbs"

    -------------- couper ici --------------
    ' ----------------------------------------------------------
    ' Script de test de variables d'environnement SYSTEM et USER
    ' JC BELLAMY © 2013
    ' ----------------------------------------------------------
    Dim shell, args
    Set shell = WScript.CreateObject("WScript.Shell")
    Set args  = Wscript.Arguments
    If args.count=0 Then wscript.quit
    nomvar=args(0)
    S=""
    call valvar("system")
    call valvar("user  ")
    wscript.echo S
    Wscript.quit

    '--------------------------------------------------------------------
    Sub valvar(environment)
    Set env=Shell.Environment(trim(environment))
    S=S & VBCRLF & "Environnement " & environment & " : " & nomvar & "=" & env(nomvar)
    End Sub
    -------------- couper ici --------------
     P.ex. :
    C:\>getvar temp

    Environnement system : temp=%SystemRoot%\TEMP
    Environnement user   : temp=%USERPROFILE%\AppData\Local\Temp


    May the Force be with You!
    La Connaissance s'accroît quand on la partage
    ----------------------------------------------------------
    Jean-Claude BELLAMY
    http://www.bellamyjc.fr ou http://jc.bellamy.free.fr

    samedi 8 juin 2013 17:16
  • 1) J'ai modifié les variables TEMP et TMP de SYSTEM et USER via Ordinateur>Propriété>Paramètre avancé>Variables d'environnement.

    J'exécute le script GetTemp ci-dessus et les variables sont bien modifiée.

    Je quitte la session

    Je me reconnecte

    Elles ont repris leurs valeurs par défaut !?

    2) J'ai essayé le script SetTemp mais j'ai une erreur ""d:\Temp\SetTemp.vbs(3,1) Erreur d'exécution Licrosoft VBScript: Nom du fichier ou de la classe introuvable lors de l'opération Automation"

    lundi 10 juin 2013 15:42
  • Le lundi 10/06/2013 17:42:26, Benoit Lar a écrit dans le message <news:7d3bd533-728d-4740-8775-2435729c8df8@communitybridge.codeplex.com> ce qui suit :

    1) J'ai modifié les variables TEMP et TMP de SYSTEM et USER via Ordinateur>Propriété>Paramètre avancé>Variables d'environnement.

    J'exécute le script GetTemp ci-dessus et les variables sont bien modifiée.

    Je quitte la session
    Je me reconnecte

    Elles ont repris leurs valeurs par défaut !?

    Il doit y avoir quelque part un script ou un programme qui rétablit les variables d'environnement!
     Il faudrait que tu "épluches" tout ce qu'il y a comme processus lancés lors des ouvertures de session dans :

    Les DOSSIERS démarrage :
      %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
      %ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Startup

    Les CLEFS démarrage :
     HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
     HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
      >

    2) J'ai essayé le script SetTemp mais j'ai une erreur ""d:\Temp\SetTemp.vbs(3,1) Erreur d'exécution Licrosoft VBScript: Nom du fichier ou de la classe introuvable lors de l'opération Automation"

    Ooops !!!!
    Erreur de ma part!

    Il faut remplacer la 3ème ligne
        Set fso=WScript.GetObject("Scripting.FileSystemObject")

    par :
        Set fso=WScript.CreateObject("Scripting.FileSystemObject")

    Désolé ...


    May the Force be with You!
    La Connaissance s'accroît quand on la partage
    ----------------------------------------------------------
    Jean-Claude BELLAMY
    http://www.bellamyjc.fr ou http://jc.bellamy.free.fr

    lundi 10 juin 2013 17:32
  • J'ai fait la correction. Maintenant, j'ai le message : "d:\Temp\SetTemp.vbs(11,1) Erreur d'execution Microsoft VBScript : Permission refusée."

    Pour ce qui est du script ou du logiciel qui modifierai les variables, j'ai rien trouvé pour l'instant

    lundi 10 juin 2013 20:39
  • Le lundi 10/06/2013 22:39:19, Benoit Lar a écrit dans le message <news:05b84499-f886-4795-994c-5c22e65fdfc8@communitybridge.codeplex.com> ce qui suit :

    J'ai fait la correction. Maintenant, j'ai le message : "d:\Temp\SetTemp.vbs(11,1) Erreur d'execution Microsoft VBScript : Permission refusée."

    A tous les coups tu N'AS PAS LU mes préceptes précédents
    (dans mon message du 06/06 à 10h00) :
         "[...]
          NB: je ne l'ai pas précisé explicitement parce que
          cela va de soi, si on veut modifier une variable
          d'environnement SYSTEME (donc stockée dans
          HKLM\SYSTEM\CurrentControlSet\.....), il faut bien
          évidemment le faire EN TANT QU'ADMINISTRATEUR, sinon
          cela sera refusé par UAC (User Account Control)"

    As-tu lancé le script depuis une fenêtre de comandes ouverte EN TANT QU'ADMINISTRATEUR ?


    May the Force be with You!
    La Connaissance s'accroît quand on la partage
    ----------------------------------------------------------
    Jean-Claude BELLAMY
    http://www.bellamyjc.fr ou http://jc.bellamy.free.fr

    mardi 11 juin 2013 06:57
  • Effectivement, ça marche tout de suite mieux... Je pensais être admin mais ce n'étant pas complètement le cas. J'ai trouvé un post ou tu expliques ça.. je regarderais ce soir

    Les modifications sont bien faites mais à la fermeture/ouverture de session suivante, elles sont perdues...

    J'aimerais bien savoir ce qui provoque cela car ce sont quand même des variables systèmes donc je ne vois pas pourquoi une application tierce se permettrait de les modifier...

    mardi 11 juin 2013 07:45
  • Après plusieurs essaie, la modification n'est vraiment pas conservée.

    Comme tu l'as dit, j'ai regardé si quelques choses ne modifie pas les variables à l'ouverture de session mais j'ai rien trouvé...

    Je sèche...

    mardi 11 juin 2013 13:54