Ich kenne keine gute Lösung für Batch-Dateien, aber ich kann die Geschichte erklären.
Unter Windows 2000/XP/2003 ist %ALLUSERSPROFILE%
genau der Name des Stammverzeichnisses des Verzeichnisses all-users/shared/common. In der Regel "C: \ Dokumente und Einstellungen \ Alle Benutzer". Die Windows-Shell hat eine spezielle Ordnerkonstante mit dem Namen CSIDL_COMMON_APPDATA, die normalerweise in "C: \ Dokumente und Einstellungen \ All Users \ Anwendungsdaten" aufgelöst wird, aber auf diesen Systemen ist leider keine Umgebungsvariable für diesen Pfad definiert.
In Windows Vista und höher wurden die Ordner für Dokumente, Musik und Video aus dem Ordner %ALLUSERSPROFILE%
entfernt und in einen neuen Ordner mit dem Namen Public ("c: \ Users \ Public") verschoben und können unter %PUBLIC%
gefunden werden. CSIDL_COMMON_APPDATA hat auch eine Umgebungsvariable namens %ProgramData%
, und da die meisten anderen Ordner nach %PUBLIC%
verschoben wurden, wurde entschieden, dass %ALLUSERSPROFILE%
den Unterordner Anwendungsdaten nicht benötigte, so dass %ProgramData%
dasselbe ist wie %ALLUSERSPROFILE%
.
Wenn Sie schreiben, eine Batch-Datei:
Mein Vorschlag ist, verwenden %ProgramData%
wenn es vorhanden ist, andernfalls zurückgreifen zu %ALLUSERSPROFILE%\Application Data
. Ich weiß nicht, ob die Anwendungsdaten-Ordner einen anderen Namen auf lokalisierten Versionen von Windows hat ...
Wenn Sie eine C/C++ Anwendung schreiben:
Verwendung SHGetFolderPath.
Wenn Sie eine .NET-Anwendung schreiben:
Verwendung Environment.SpecialFolder.
Nicht ganz hilfreich bei der Lösung Ihres speziellen Problems, aber die pragmatische Lösung wäre, Ihre Kunden zu bitten, auf eine unterstützte Version des Betriebssystems zu aktualisieren. – IInspectable
Bitte fügen Sie ein Sprach-Tag hinzu, damit wir wissen, in welcher Sprache Sie programmieren. – Anders
@Anders Die Frage ist nicht sprachspezifisch. Ich bin mir bewusst, dass es APIs gibt, um das gleiche zu erreichen, ohne auf Umgebungsvars zurückgreifen zu müssen, aber ich wollte speziell über die Umgebung vars wissen. – Grodriguez