Doppelte Path Einträge mittels Batchfile entfernen und Path mittels setx neu setzen

Mitglied: Mario.Steinberg

Mario.Steinberg (Level 1) - Jetzt verbinden

14.09.2011 um 08:13 Uhr, 6103 Aufrufe, 19 Kommentare

Hall,

ich habe folgendes Problem. Ich möchte in einem Batchfile einige Systemvariablem mittels setx setzen und zusätzlich die Pathvariable erweiteren.
Das Batchfile wird bei jedem Login aufgerufen weshalb ich schaue, ob der hinzuzufügende Pfad bereits im Path vorhanden ist. Das funktioniert auch schon ganz gut.

Problematisch ist, dass sich der Path beim Aufruf von set aus der Systemvariable Path und der (usersprzifischen) Umgebungsvariable zusammen setzt und deshalb nach jetzigen Stand, die Einträge der Umgebungsvariable, anschl. doppelt im Path vorhanden sind. Diese möchte ich jetzt aus dem Path entfernen. Meine Idee war erstmal den Inhalt der Pathvariable in eine Datei zu schreiben. Jeden Eintag in eine neue Zeile und nacher alles wieder zusammen zu bauen ohne doppelte Einträge zu berücksichtigen. Allerdings bekomme ich es schon nicht hin jeden Eintrag aus der Pathvariable mit einem anschl.Zeilenumbruch in eine Datei zu schreiben.

Würde mich freunen, wenn jemand den einen oder anderen guten Vorschlag für mein Problem hat und mir evtl. sogar erklären kann, warum das mit Zeilenumbruch nicht funktioniert.

Danke schon mal und Gruß
Mario
Mitglied: 60730
60730 (Level 5)
14.09.2011 um 09:47 Uhr
Moin,


  • Das mit dem @echo off ist nicht wirklich mein Ding...
  • setlocal enabledelayedexpansion ist für mich - ohne Kaffee im Kopp auch nicht wirklich an der stelle verständlich

Und da du schon bemerkt hast, dass es via Set nicht so einfach funktioniert - nimm dich den anderen Weg zu den Infos...

reg query HKEY_CURRENT_USER\Environment /v path

bzw:
Und den anderen Ast findest du sicherlich auch...

Ps: Wir sprechen aber schon von Windows NT 3.51?

Gruß
Bitte warten ..
Mitglied: Biber
14.09.2011 um 10:30 Uhr
Moin Mario.Steinberg,

das Teilproblem "jeden Eintrag aus der Pathvariable mit einem anschl.Zeilenumbruch in eine Datei zu schreiben" könntest du wie folgt lösen.

[.Demo am CMD-Prompt; führendes ">" nicht mit eingeben]
In einem Batchschnipsel und mit Umleitung in eine Datei (falls erforderlich) dann sinngemäß

Grüße
Biber
Bitte warten ..
Mitglied: Mario.Steinberg
14.09.2011 um 11:26 Uhr
Hallo Timo, hallo Biber,

danke für eure Antworten.
Eine ähnliche Zeile wie for %i in ( "%path:;=" "%" ) do @echo %~i habe ich bereits im Forum gefunden und auch ausprobiert. Das Problem dabei waren dann aber Pfadangaben mit Leerzeichen. Hier scheine die offensichtliche keine Probleme zu machen. Wieso?

Weiß jemand warum das mit dem echo. >>tmp.txt nicht funktioniert hat? Es sah aus als würde er den Zeilenumbruch immer nur am Ende machen.

Wie baue ich mir am einfachsten einen neuen Path zusammen ohne doppelte Einträge zusammen, wenn ich den Inhalt der Pathvariable in dei Textdatei geschrieben habe?
Muss ich überhaupt über die Textdatei gehen?
Bitte warten ..
Mitglied: pieh-ejdsch
14.09.2011 um 11:43 Uhr
moin Mario,

Warum denn so Kompliziert?
Gruß Phil
Bitte warten ..
Mitglied: 99045
99045 (Level 2)
14.09.2011 um 11:51 Uhr
Hi,

Zitat von @Mario.Steinberg:
Muss ich überhaupt über die Textdatei gehen?

nein, ich würde versuchen, das so zu lösen:
Damit entfernst du zwar keine doppelten Einträge, verhinderst aber, dass neue dazukommen.

Gruß
Bitte warten ..
Mitglied: 60730
60730 (Level 5)
14.09.2011 um 12:51 Uhr
moin,

an dieser Stelle würde ich gerne einen Break machen...

  • das Frühstück "die Pflicht" ist verdaut und bevor wir zur Kür kommen...
  • Die Korinther und fast alle Koriphäen sind schon da und bevor die sich auch noch die Whiskeyflasche ins Müsli kippen, obwohl die ab jetzt in die Bolognese Spaghettigehören..

  • Was ist das Ziel und warum denkst du, es muß so wie du es beschreibst ablaufen?

Denn "frickeln/friemeln/Bibern/Pitschen/Bastlan/[nickdeinerWahl]" ist immer eine nette Abwechslung, aber es gibt ganz sicher bessere quoten, wenn der Grund == das Ziel bekannt sind.

Also - was genau soll es denn werden?

Gruß
Bitte warten ..
Mitglied: Mario.Steinberg
15.09.2011 um 13:48 Uhr
Hallo,

Ich habe mehrere Clients in einer Domäne auf denen beim Einloggen ein Skript aufgerufen wird. Dieses kann u.U. mehrfach am Tag angepasst sein.
In diesem sollen nun auch eineige Systemvariablen gesetzt und der Path erweitert werden. Soweit zum Plan.

Konnte leider die Tage nicht viel am Skript weiter bauen. Deshalb bin ich auch noch nicht weiter. Versuche jetzt mal den Ansatz von Phil.Vielleicht kann er mir kurz erklären was diese kryptisch anmutende Zeile macht?

Gruß
Bitte warten ..
Mitglied: 60730
60730 (Level 5)
15.09.2011 um 14:25 Uhr
?
vielleicht kann er mir kurz erklären was diese kryptisch anmutende Zeile macht?

(echo %path:;=;&echo\%)|find /i "c:\windows;">nul&& echo Schon drin

Zerlege es doch einfach...
(echo %path:;=;&echo\%)
  • macht was genau?

(echo %path:;=;&echo\%)|find /i "c:\windows;"
  • und diese Erweiterung?

Vielleicht wird es so deutlicher:
(echo %path:;=;&echo\%)|find /i "gibtsnicht;">nul&& echo Schon drin||echo nicht drin

Ich habe mehrere Clients in einer Domäne auf denen beim Einloggen ein Skript aufgerufen wird.
Dieses kann u.U. mehrfach am Tag angepasst sein.
In diesem sollen nun auch eineige Systemvariablen gesetzt und der Path erweitert werden. Soweit zum Plan.
Der Plan ist aber nix genaues...

  • Ein Skript, das als startupscript läuft und das prüft die Variablen und setzt Sie im Fehlerfall mit setx -m
Und wie das geht hat dir der Phil ja gezeigt... Und das echo gegen setx austauschen - das kannst du sicherlich.

Gruß
Bitte warten ..
Mitglied: Mario.Steinberg
15.09.2011 um 15:04 Uhr
Hallo,

Zerlege es doch einfach...

habe ich bereits gemacht und auch druchdrungen.
Das eigentliche Probelm war ja eigentlich auch ein anderes:

Beim Erweitern der Systemvariable Path mittels setx in der Form



werden zusätzlich die Inhalte der userspezifischen Path Umgebungsvariablen mit in die Systemvariable Path geschreiben (ich unterscheide absichtlich zwischen System- und Umgebungsvariable!!!). Diese sind anschl. doppelt enthalten. Ich habe nach einem Weg gesucht dieses zu verhindern! Diesbezüglich fiel mir nichts besseres ein, als die Inhalte der Pathvariable in eine Textdatei zu pusten und anschließend zu versuchen aus diese Textdatei die Variable neu zusammen zu setzten und die Doppelten Einträge außen vor zu lassen.

Besser noch wäre eine Lösung ohne den Umweg in die Datei!???

Danke und Gruß
Mario
Bitte warten ..
Mitglied: 99045
99045 (Level 2)
15.09.2011 um 15:16 Uhr
Hi,

der Systempfad (machine environment) steht in
als REG_EXPAND_SZ - Wert PATH.

Den musst du dann halt mit reg query beackern und auswerten.

Und wenn du setx mit dem Parameter /? oder auch ganz ohne Parameter aufrufst, findest du auch sicher die Option, wie man nur das "machine environment" verändert. ;-) face-wink

Gruß

Edit: Dass der Parameter -m bereits verwendet wurde, hatte ich leider überlesen.
Bitte warten ..
Mitglied: Mario.Steinberg
15.09.2011 um 15:58 Uhr
Hallo,

Und wenn du setx mit dem Parameter /? oder auch ganz ohne Parameter aufrufst, findest du auch sicher die Option, wie man nur das "machine environment" verändert.
habe ich natürlich auch gefunden.

Vielleicht ist folgende Beschreibung zugänglicher:

Unter Systemsteuerung->System->Erweitert->Umgebungsvariablen gibt es einmal eine Pathvariable unter Benutzervariablen für xxx und einen Pathvariable unter Systemvariablen. Rufe ich echo %Path% auf, bekomme ich zusammengefasst das ausgegeben, was in beiden drin steht. Ergänze ich das Ergebnis um meinen neuen Pfad und schreibe es mittels setx Path %Path%;%NewPath" -m nach Path sind in der Systemvariable Path nicht nur die Sachen drin, die vorher drin waren plus mein neuer Eintag sondern auch die Dinge, die in der Benutzervariable Path drin stehen. Diese Sachen stehen dann nun einmal in der Benutzervariable Path und in der Systemvariable Path. Bei erneutem Aufruf von echo %Path% habe genau diese Anteile dann doppelt und ein erneuter Login würde sie nochmal dort rein schreiben u.s.w.
Bitte warten ..
Mitglied: 99045
99045 (Level 2)
15.09.2011 um 16:01 Uhr
Hi,

Vielleicht ist folgende Beschreibung zugänglicher:

Danke, das ist mir bekannt. Deshalb habe ich ja zum Regeintrag auch geschrieben:
Den musst du dann halt mit reg query beackern und auswerten.

Gruß
Bitte warten ..
Mitglied: 60730
60730 (Level 5)
15.09.2011 um 16:14 Uhr
Moin,

Zitat von @Mario.Steinberg:
Hallo,

Vielleicht ist folgende Beschreibung zugänglicher:

@ MarioichbeissgleichindenSteinberg...

Dieser komische Fuzzi mit dem Klappenauge hat dir doch ne halbe stunde und ein paar zerquetschte Steine als allerallerallersterster auf deine Frage genau das geschrieben, hast du das nicht gelesen?

Manchmal denk ich wirklich, ich sollte in einer anderen Sprache schreiben...
Und nein - die problematik mit dem geteilten und wieder zusammengesetzten Path mußt du hier niemandem erklären....

Und der Pietschen einzeilerei ist es wurstregal, ob der Wert in diesem oder jedem Pfad vorhanden ist, issers nicht rein, issers doch nicht rein.

Apropos rein - etwas mehr Mühe und Testen deinerseits, sonst mach ich die Keksdose zu..
keine Arme - keine kekse haben andere schon wegen viel weniger von mir bekommen
Bitte warten ..
Mitglied: pieh-ejdsch
16.09.2011 um 11:34 Uhr
moin,

[OT]
und wo bleibt die Armada der KampfKekse?
[/OT]

wenn Die BenutzerVariable den Inhalt hat, dann muss ebend erst %Path% abgerfragt werden und danach entsprechend der RegistryWert.

Im Batch entsprechend %%i statt %i

zu beachten ist: im Neuen Path stehen die Pfade fest Verankert und nicht mit %Systemroot%
wenn doppelte Einträge in der Variable vorhanden sind sollte man zum Aussortieren gleich die Reihenfolge bearbeiten

Gruß Phil
Bitte warten ..
Mitglied: 60730
60730 (Level 5)
16.09.2011 um 12:00 Uhr
Servus Phil,

Zitat von @pieh-ejdsch:
moin,

[OT]
und wo bleibt die Armada der KampfKekse?
[/OT]
<code type=palin>
<code>
Ein freudscher Vertipper?
Gruß Phil
[/OT]

Retour
Bitte warten ..
Mitglied: Mario.Steinberg
16.09.2011 um 12:25 Uhr
Hallo@all,

wo ich mich jetzt gerade wieder mit dem Thema befassen will, fällt mir auch ein, warum ich die Idee mit den Registry Einträgen nicht weiter in Betracht gezogen habe. Erfordern die nicht einen Neustart? Ich schaue nochmal nach aber, wenn sind die natürlich keine Alternative.

Danke und Gruß
Bitte warten ..
Mitglied: 99045
99045 (Level 2)
16.09.2011 um 12:29 Uhr
Hi,
wenn du die Einträge direkt in der Reg änderst und anschließend über die Systemsteuerung im Eingabefeld der "Umgebungsvariablen" irgendwas änderst und wieder wegnimmst und dann auf "Übernehmen" klickst, ist kein Neustart erforderlich, ansonsten schon.
Das ist also keine wirkliche Alternative für eine Automatik.
Du könntest aber versuchen, ob man das mit setx -m und irgendeinem Dummywert umgehen könnte.

Gruß
Bitte warten ..
Mitglied: pieh-ejdsch
16.09.2011 um 22:26 Uhr
moinn Timo,

[OT]
Pommes mit Mayo? - Oder gerührt!
Ich hätt da lieber paar Nudeln in der Flasche... die passen Besser zum Ketschup auf den Teller.
[/OT]

@Mario
Da Du das ganze als StartSkript laufen lassen willst:
SetX übernimmt die Variablen auch Sofort nach dem Setzen.
Es kommt Natürlich darauf an aus Welcher Umgebung das gestartet wird. Das System läuft aber schon in einer definierten Umgebung, welche solange besteht bis sie neu geladen wird.
Bestehen in der Aktuellen Umgebung Variablen - werden diese Durch setzen von SetX Nicht Verändert.
Wird CMD beendet und nacher neu gestartet ist auch eine Neue Umgebung Vorhanden.

die heissen ja nicht umsonst UmgebungsVariablen
das Zusammenführen einer *.reg beeinflusst das sofortige setzten für eine neue CMD-instanz Nicht

Gruß Phil
Bitte warten ..
Mitglied: 99045
99045 (Level 2)
16.09.2011 um 22:37 Uhr
Zitat von @pieh-ejdsch:
das Zusammenführen einer *.reg beeinflusst das sofortige setzten für eine neue CMD-instanz Nicht

Das Zusammenführen einer .reg beeinflusst das sofortige Setzen für eine neue CMD-Instanz sehr wohl, wenn man - wie ich beschrieben habe - setx -m nach dem Zusammenführen mit einem Dummy nutzt.
Bitte warten ..
Heiß diskutierte Inhalte
Hardware
Outdoor LAN sichern mit oder ohne Fritzbox Verständnis Frage
bluescreenVor 1 TagFrageHardware17 Kommentare

Hallo zusammen, ich habe die letzten Stunden schon viel hier gelesen, stehe aber ein wenig auf dem Schlauch, wie und wo ich weiter suchen ...

Windows 10
Windows 7 pro Lizenz nutzen für Windows 10
lukas0209Vor 23 StundenFrageWindows 1015 Kommentare

Hallo Community, ich versuche seit einigen Wochen unser Netzwerk von Windows Server 2008 R2 Standard auf Windows Server 2016 Essentials um, welches eine städtische ...

Windows Netzwerk
Telefone im Netzwerk bekannt machen
jannik0205Vor 1 TagFrageWindows Netzwerk13 Kommentare

Hallo Zusammen, In unserem Unternehmen gibt es eine Telefonanlage mit eigenem Telefonienetz (192.168.5.X). Schließe ich ein Telefon an eine Netzwerkdose, bekommt es vom DHCP- ...

Netzwerkgrundlagen
Frage zu LWL Kabel
gelöst NominisVor 1 TagFrageNetzwerkgrundlagen6 Kommentare

Hallo, ich habe nur mal eine kurze Verständnisfrage. Es geht um die Verbindung bzw. Anbindung von Switches (Cisco 48Port 10/100/1000 MBit mit 2 SFP+ ...

Windows Netzwerk
WTS-Anmeldung per RDP am Wochenende verbieten?
MuM2810Vor 1 TagFrageWindows Netzwerk8 Kommentare

Hallo zusammen, wir haben bei uns Windows Server 2016 mit 2 Terminal Servern im Einsatz. Wie aus dem Titel schon ersichtlich ist, ist bei ...

Microsoft
Microsoft Teams - "bitte wenden Sie sich an (. . .) um Teams für "domäne" zu aktivieren" nur bei einem Benutzer
eastfrisianVor 1 TagFrageMicrosoft6 Kommentare

Hallo zusammen! Wir haben bei uns Teams als Hybridversion eingeführt (Exchange on premise, AD-Sync in die Cloud) und nutzen Teams über das basic-Abonnement. Während ...

Netzwerke
Keine Versand von Mails von der Firmen zur Privaten E-Mailadresse möglich
blaub33r3Vor 1 TagFrageNetzwerke6 Kommentare

Hallo zusammen, wieso kommt der User keine Mails mehr? Der Sender wird als Spamer betrachtet? 1. Mailing an andere Privaten Adressen / Firmen Adressen ...

Netzwerke
Netzwerklaufwerk - Nur Lesen (Streamen)
CryexXVor 23 StundenFrageNetzwerke8 Kommentare

Hallo, ich hab mal ne Frage und hoffe auf Lösung. Mir schießt aktuell keine in den Kopf :( Ich möchte ein Netzlaufwerk freigeben. Auf ...