5.7k Aufrufe
Gefragt in WindowsXP von
Hallo,

Wie kann ich diesen pfad in umgebungsvariablen ausdrücken , so dass das auch auf anders sprachigen windows hinaut?


C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\x


ich finde nur:

%appdata%
C:\Dokumente und Einstellungen\%username%\Anwendungsdaten

%ALLUSERSPROFILE%
C:\Dokumente und Einstellungen\All Users

hilft beide nicht.
:(

5 Antworten

0 Punkte
Beantwortet von
das solltest du mit vb script heraus finden können, beispiele siehe hier

msdn.microsoft.com/en-us/library/ms954149.aspx
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Die WinAPI-Funktion SHGetFolderPath() scheint wirklich der einzige Weg zu sein - ich kenne keine etwaigen Umgebungsvariablen, mit denen man weiter als bis zur Basis von "All Users" kommt. Siehe auch www.scriptlogic.com/support/CustomScripts/environmentVariableReference.html
0 Punkte
Beantwortet von luke_filewalker Experte (3.3k Punkte)
Moin

Der Pfad der auf

C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\

zeigt, liese sich auch ganz simpel direkt aus der Registry auslesen.

Was genau willst Du machen bzw. in welchem Kontext brauchst Du diesen Pfad? Batch? Programmiersprache? Gib mal mehr Infos bitte.
0 Punkte
Beantwortet von luke_filewalker Experte (3.3k Punkte)
Ich wusste das ich Zuhause noch was ähnliches im Archiv hatte. Ich habe mal etwas ähnliches gebraucht und für Deine Anforderung umgeschrieben. Falls Du das im Batch brauchen kannst, wovon ich jetzt mal ausgehe. Denn in einer "vernünftigen" Programmiersprache ist das eigentlich simpel wenn diese die Registry auslesen kann.

reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common AppData"|find "Common AppData" /i>%temp%\test.out
for /f "delims=" %%i in (%temp%\test.out) do set CommonAppData=%%i&del %temp%\test.out
set CommonAppData=%CommonAppData:~26%


Erklärung:

[list][*]Zeile1) Hier zuerst der entsprechende Registry Wert ausgelesen. Da das Ergebnis eine mehrzeilige Ausgabe bewirkt, was wir aber nicht brauchen können, wird mit FIND die Ausgabe auf die relevante Zeile beschränkt. Dann wird das Ergebnis, also die benötigte Zeile erstmal in einer Datei zwischengespeichert.
[*]Zeile2) Hier wird die Zeile(Datei) in eine Variable gelesen, damit wir damit weiter arbeiten können. Direkt im Anschluss wird die Temp Datei dann gleich gelöscht. Den Löschbefehl kann man auch in eine eigene Zeile schreiben, dann muss aber auch das & entfernt werden. Ich schreibe halt gerne kompakten Code und ausserdem gilt in Batches: je weniger Zeilen desto schneller werden sie abgearbeitet. Batch ist eh schon lahm genug, da strickt meine Oma schneller. ;-)
[*]Zeile3) Da vor dem eigentlichen Ergebnis noch Leerzeichen, die Strings "Common AppData" und "REG_SZ" und 2 Tabulatoren stehen, müssen wir das alles abschneiden. Darum wird der Inhalt der Variable ab Position 27 ausgelesen und das Ergebnis gleich wieder der Variable zugeordnet.[/list]

Jetzt gibt es in der Shell neben CommonProgramFiles noch die Variable CommonAppData. Ob das auch in andersprachigen Win Varianten funktioniert kann ich nicht testen, "sollte" es aber.
0 Punkte
Beantwortet von luke_filewalker Experte (3.3k Punkte)
Bevor ich es vergesse: Gestern Abend sah ich zufällig einen ähnlichen Batch von Massaraksch mit einer anderen Aufgabe. Das inspirierte mich meinen Batch zu optimieren. Die zweite Version hat zwei Vorteile: 1) Der Umweg über eine temporäre Datei entfällt. Die Ausgabe kann direkt verarbeitet werden, was erheblich eleganter ist. 2) Statt insg. 4 Zeilen, benötigt dieser nur noch 2.

for /f "delims=" %%i in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common AppData"^|find "Common AppData" /i') do @set CommonAppData=%%i
set CommonAppData=%CommonAppData:~26%


Übrigens liesen sich mit den gleichen "Tricks" auch die Variablen %ALLUSERSPROFILE% und %APPDATA% kombinieren. Das wäre dann aber speziell nur für diesen einen Pfad tauglich. Mein Vorschlag kann dagegen universell eingesetzt werden wenn es darum geht Werte aus der Registry zu lesen und Batches als Variable zur Verfügung zu stellen.
...