Variablen in Registry

easy.2ci

Commodore
Registriert
Mai 2006
Beiträge
4.388
Hallo,

kurze Frage in die Runde, da Google auch nichts passendes hatte.

Ich hab mir das Rechtsklick Kontextmenü im Explorer auf der Ordnerseite links erweitert mit einem EIntrag in der Registry unter:

HKEY_CLASSES_ROOT\Directory\shell\Standardordner anlegen\command

den Standardwert gesetzt auf:

C:\Programme\CreateFolder.bat "%1"


Das klappt auch gut, bei einem Klick auf einen beliebigen Ordner kann ich also meine Batch aufrufen und den geklickten Ordner als %1 übergeben, woraufhin meine Batch dann tätig wird.

Nun will ich den Registry wert aber variabel halten, da ja zB unter Win7 der C:\Programme nur noch als Hardlink existiert. Ich will in die Registry also eine Umgebungsvariable verwenden in der Form:

%PROGRAMFILES%\CreateFolder.bat "%1"


Aber das klappt nicht. Er sagt immer Zugriff verweigert. Mit Anführungszeichen habe ich auch rumgetestet, brachte aber nichts. Da ich erstmal rein auf XP bin brauche ich auch keine Anführungszeichen da ich im Ordnernamen keine Leerzeichen habe.


Jemand eine Idee dazu?
 
Hi,

wenn du den von dir händisch gesetzten Wert exportierst sollte eigentlich die Variable genutzt werden, wenn sie denn existiert. Hast du das schonmal getestet?

Ist die Umgebungsvariable denn korrekt gesetzt? Was liefert dir z.B. "echo %programfiles%"?


VG,
Mad
 
Die Idee die Batch in einen Ordner zu legen, der in der Path Variable vorkommt ist gut, das klappt auch. Ist aber ehr ein Workaround, als eine echte Lösung.

Der Export meines manuell angelegten Eintrages macht da nicht automatisch Variablen raus:
@="C:\\Programme\\CreateFolder.bat \"%1\""


Die Variable ist in Ordnung gefüllt, ist eine Systemvariable. Er findet die Batch einfach nicht wenn ich schreibe

%PROGRAMFILES%\CreateFolder.bat "%1"
 
Hi,

kannst du denn über die cmd in das Verzeichnis wechseln, wenn du schreibst "cd %programfiles%"?

Bei mir macht er da z.B. "C:\Program Files" draus, da wäre es dann natürlich schon wichtig mit den Gänsefüsschen zu arbeiten denke ich. Aber das hast du ja schon geklärt, da du Win XP nutzt...

VG,
Mad
 
Nanu? Da blicke ich aber nicht durch.

C:\Programme\CreateFolder.bat "%1"
Ruft eine Batch CreateFolder.bat auf die hier ›zufällig‹ in C:\Programme\ liegt und den übergebenen Wert irgendwo als Ordner anlegt, ganz wie es in CreateFolder.bat festgeschrieben ist.
Da eine Batch über nichts mehr denn den Pfad zu erreichen sein muss stelle ich mir die Frage, wo da das Problem liegt mit ihrem Aufenthaltspfad so umgehen zu wollen? Wenn, Standard, der Pfad = %PATH% \WINDOWS enthält parke man die Batch dort und es sollte ohne Weiteres klappen.

Ebenso sollte innerhalb der Batch eine Variable %PROGRAMFILES% funktionieren, aber ich sehe da keinen Zusammenhang zum beschriebenen Problem.

CN8
 
Innerhalb der Batch kann ich mit Variablen arbeiten, das ist nicht das Problem. Die Batch erzeugt mir eine Umgebung, in der in meiner Firma Entwicklungsprojekte gestartet werden. Sie erzeugt Default Pfade, kopiert Header, Vorlagen für Dokumentation, beachtet unsere Namenskonventionen etc. Die Batch funktioniert und der Inhalt spielt hier keine Rolle. %1 ist also kein Ordnername der angelegt werden soll, sondern %1 enthält einen Pfad innerhalb dessen die Batch die Entwicklungsumgebung aufsetzen soll.

Die Arbeiten die die Batch macht finden im Ordner %1 statt. Ich klicke also irgendwo auf einem Netzlaufwerk welches im SAN liegt mit Rechtsklick auf den Ordner und wähle im Kontextmenü meine Batch aus. Der Ordner wo geklickt wurde wird dann als %1 an meine Batch übergeben.



Hier geht es allerdings rein um die Ablage und Aufrufen meiner Batch. Ich möchte diese ungern in Standard Windows Pfade ablegen, das ist wenig sauber.
Und einen eigenen Ort extra deswegen in den Path mit aufnehmen geht auch nicht, da unsere Entwicklermaschinen schon an die Grenze der maximalen Pfad Länge stoßen.

Ich will aber in der Registry auch nicht C:\Programme schreiben, da beim Wechsel der Entwicklungsumgebung auf Win7 das eben nicht mehr funktionieren würde.
Ich kann natürlich eine Fallunterscheidung reinbringen in der Art:

Wenn OS=XP dann C:\Programme\CreateFolder.bat in Registry eintragen
Wenn OS>XP dann C:\"Program Files"\CreateFolder.bat in Registry eintragen

Muss ich mir nochmal überlegen
 
Zuletzt bearbeitet:
Nun gut, ich kann das alles nachvollziehen. (CreateFolder als Name lässt etwas vermuten, die Batch tut aber offenbar ganz was anderes.)

Ich möchte diese ungern in Standard Windows Pfade ablegen, das ist wenig sauber.
Das nicht etwa unsauber wie du schreibst, das ist althergebrachter Standard. Ob nun sonstwo im %PATH% oder kurzerhand in \Windows wäre egal. Ich habe auch meine von DOS übernommen Strukturen mit einem eigene UV Namens Batch, rate mal was ich drin bevorrate.


Und als ob ich das geahnt hätte, es gibt da tatsächlich ein Tretmine die irgendwo dokumentiert ist, die man aber nie findet. Die aufzulösenden Systemvariablen müssen in doppelte %e gekapselt werden - statt %ProgramFiles% also %%ProgramFiles%% dann werden sie auch live ausgewertet. Ich hatte es erst mit Entwertung nach bekanntem Schema \"%1\" versucht, aber es muss das Doppelprozent sein. Versuchs mal!

CN8
 
wenn du Systemvariablen verwenden willst in der Registry, sollte der Eintrag als REG_EXPAND_SZ(erweiterte Zeichenfolge) erfolgen, zB. als Command-Eintrag "%ProgramFiles%\CreateFolder.bat" "%1".

Hintergrund ist, dass "ProgramFiles" nicht als Path-Variable definiert ist.
 
Mit doppelten %% Zeichen funktionierts auch nicht. Leider.

Den Schlüssel als Reg_Expand_SZ anzulegen ist leider auch nicht möglich, da ich den Schlüssel "(Standard)" auf %PROGRAMFILES%\CreateFolder.bat "%1" setzen muss.

Und der Standard Schlüssel ist immer von REG_SZ.

Zusätzlich angelegte Schlüssel werden ignoriert.
 
Am Standard kannst du in der Tat nichts drehen.
Wenn aber das mit den %% nicht klappt muss an anderer Stelle was faul sein.

Poste mal bitte den exportierten Schlüssel und auch die Batch die du benutzen willst (auf Beispielhaftes intern reduziert).

CN8
 
Zurück
Oben