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.