Mit CMD-Befehl Path in Umgebungsvariable integrieren?

alexh_

Cadet 3rd Year
Registriert
Juni 2009
Beiträge
39
Hallo,
ich möchte mir eine Batch schreiben, mit der ich den Pfad "F:/" in die Umgebungsvariable Path einfügen kann, also einfach hinten dran setzen. Habe bis jetzt das hier: set Path="F:\";%Path% aber iwie klappt das nicht. Wieso?

Vielen Dank im voraus.
 
Also bei mir geht das nicht, mein Batch-Befehl ist ja auch ähnlich wie der, der beschrieben wurde. Habs auch grad mit nem C:-Path probiert, falls es nich geht andere Laufwerke außer C einzubinden aber geht auch nicht. komisch...
 
Ich habs grade nochmal probiert.
Ich habe es so getestet, dass ich es einfach in die cmdline eingetippt habe.
Danach wurde mir der neue Path auch korrekt per "set pa" angezeigt.
Wenn ich dann aber das cmd-Fenster geschlossen und wieder neu geöffnet habe, war der Eintrag verschwunden. O_o

Eine Lösung, bei der der geänderte Path gespeichert wird, würde mich jetzt auch brennend interessieren.

Gruß Timo
 
Genau das gleiche Problem hatte ich letztens auch.

Das Problem ist das Windows die Path-Variable in der Registry speichert, und zwar unter:
HKEY_LOCAL_Machine\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path

Ich hab mir deshalb ein simnples Kommandozeilen-Programm geschrieben, das genau das macht, also einen Pfad an die richtige Stelle in die Registy schreibt:

SetPathEnv

C#:
Code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using Microsoft.Win32;

namespace SetPathEnv
{
    class Program
    {
        static void Main(string[] args)
        {
            string regKey = Registry.LocalMachine + @"\SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
            
            if (args.Length == 0)
            {
                Console.WriteLine("\nSetPathEnv - Setzt die Windows Path Umgebungsvariable dauerhaft.\n");
                Console.WriteLine("Benutzung: setpathenv <Verzeichnis>\n");
                Console.WriteLine("(c) 2010 Andi Kanzler");
                Environment.Exit(0);
            }
            
            string newPath = args[0];

            if (!Regex.IsMatch(newPath, "^(([a-zA-Z]\\:)|(\\\\))(\\\\{1}|((\\\\{1})[^\\\\]([^/:*?<>\"|]*))+)$", RegexOptions.IgnoreCase))
            {
                Console.WriteLine("\nFehler: Ungültiger Pfad");
                Environment.Exit(0);
            }

            try
            {
                string oldPathvar = (string)Registry.GetValue(regKey, "Path", string.Empty);
                Registry.SetValue(regKey, "Path", string.IsNullOrEmpty(oldPathVar) ? newPath : oldPathVar + ';' + newPath, RegistryValueKind.ExpandString);
            }
            catch (Exception ex)
            {
                Console.WriteLine("\nFehler: " + ex.Message);
            }
        }
    }
}

Kompiliert findet ihr das Programm in Anhang. Benötigt mind. das .net Framework 2.0.

Einen großen Nachteil hat dss Programm allerdings: Es benötigt unter Vista/ Windows 7 Adminrechte um zu laufen, sonst kommt eine Fehlermeldung.
Der Entsprechende Pfad in der Registry ist leider geschützt. Wenn man die Path-Umgebungsvariable in der Systemsteuerung ändert, braucht man auch Adminrechte.
 

Anhänge

Zuletzt bearbeitet: (Jetzt auch mit Anhang)
Zu dem Scrip Programm habe ich Fragen...
Mit welchem Programm kann ich den Code compilieren.

wie und wo werden die Phade eingetragen... Wäre schon wenn jemand nen Beispiel mit konkreten Phadangaben posten könnte dass auch mal jemand der nicht durchsieht genau erkennen kann wie und wo was eingetragen werden muss...

Ich möchte das Script gern verwenden um folgendes zu tun...

ändern von:
Systemvariable= TMP sowie TEMP - Wert= %SystemRoot%\TEMP

ändern nach:
Systemvariable TMP sowie TEMP - Wert= Z:\



Und die Benutzervariablen

ändern von:
Benutzervariable TMP sowie TEMP Wert= %USERPROFILE%\AppData\Local\Temp


ändern nach:
Benutzervariable TMP sowie TEMP Wert= Z:\

LG. Jensen
 
Kann es sein dass du die Kommandozeile "cmd" nicht als Admin ausführst? Denn ohne Adminrechte wirst du es nicht einfügen können.
 
das ist kein Script sondern C#, ein Programmiersprache.

Wenn du einen Script schreiben willst, benutz Batch oder eine andere Scriptsprache.
 
Das Ganze geht nicht so wie gedacht.
Wenn ich CMD aufrufe erzeuge ich eine Umgebung von der Rest des Systems nichts weiß. Es weiß ja z.B. Word nicht was ich in Notepad mit der selben geöffneten Textdatei anstelle.

Innerhalb der Sitzung funktioniert das Ändern der Pfadvariable. Für dauerhafte Einträge muss ich in der Tat direkt die Registry angreifen. Es gibt Kommandozeilenbefehle die das technisch können, aber da ist reichlich unpraktisch und mit Klimmzügen verbunden - auslesen, ändern, zurückschreiben (zudem würden weitere offene CMD-Boxen davon nichts mitbekommen).

CN8
 
Warum schreibst Du es nicht direkt in die Umgebungsvariablen?
 

Anhänge

  • Umgebungsvariablen.png
    Umgebungsvariablen.png
    86,4 KB · Aufrufe: 1.160
@djatcan
Du willst wohl deine temporären Dateien auf 'ne Ramdisk umleiten? Ich glaube am elegantesten wäre es Symlinks zu benutzen, damit gibt's auch am wenigsten Probleme. Wenn du wirklich eine Ramdisk benutzt, kann es aber auch sein, daß es Probleme bei der Installation von Programmen gibt, die nach der Installation einen Neustart verlangen. Da der Inhalt einer Ramdisk nach dem Neustart weg ist, kann es hier zu Problemen kommen, da vielleicht noch etwas gebraucht wird aus den Temp-Ordnern. Manche Programme (z.B. Packer) benutzen aber auch die Tempordner. Hier müßtest du ggf. alles anpassen.
 
Habt ihr den Thread von oben weitergelesen? Das setzt den Pfad nicht fest. Das setzt ihn nur für diese Sitzung.
@TE:
Lies weiter in dem Thread, der oben von yoT!mO gepostet wurde. Weiter unten ist die Lösung, um etwas DAUERHAFT in die Umgebungsvariable "Path" einzufügen.
Biber schreibt am 12.10.2005 um 11:45:44 Uhr
Also - bei dieser Konstellation:
- in ersten (Installations-)Batch den Pfad dauerhaft erweitern mit dem ResKit-Utilitiy "Pathman.exe"
[pathzumReskit\]PathMan.exe /au d:\test
Dazu brauchst du aber das ResKit-Utility Pathman.exe.
 
Zurück
Oben