Я не знаю о хорошем решении для пакетных файлов, но я могу объяснить историю.
В Windows 2000/XP/2003 %ALLUSERSPROFILE%
именно то, что его зовут, корень каталога для всех пользователей/общего/общего профиля. Обычно «C: \ Documents and Settings \ All Users».
В оболочке Windows есть специальная константа папки, называемая CSIDL_COMMON_APPDATA, и она обычно разрешается «C: \ Documents and Settings \ All Users \ Application Data», но, к сожалению, для этих путей в этих системах нет переменной окружения.
В Windows Vista и более поздних версиях папки с документами, музыкой и видео были перемещены из папки %ALLUSERSPROFILE%
и помещены в новую папку Public («c: \ Users \ Public») и могут быть найдены с %PUBLIC%
. CSIDL_COMMON_APPDATA также получил переменную среды, называемую %ProgramData%
, и поскольку большинство других папок переместилось на %PUBLIC%
, было решено, что %ALLUSERSPROFILE%
не нуждается в подпапке Application Data, так что %ProgramData%
- это то же самое, что и %ALLUSERSPROFILE%
.
Если вы пишете пакетный файл:
Мое предположение, использовать %ProgramData%
, если он существует, в противном случае, откат к %ALLUSERSPROFILE%\Application Data
. Я не знаю, если в папке данных приложения имеет другое имя на локализованных версиях Windows ...
Если вы пишете C/C++ приложения:
Использование SHGetFolderPath.
Если вы пишете приложение .NET:
Использование Environment.SpecialFolder.
Не совсем полезно при решении конкретной проблемы, но прагматичным решением было бы попросить ваших клиентов перейти на поддерживаемую версию ОС. – IInspectable
Пожалуйста, добавьте тег языка, чтобы мы знали, на каком языке вы программируете. – Anders
@Anders Вопрос не зависит от языка. Я знаю, что есть API-интерфейсы для достижения того же самого, не прибегая к экологическим vars, но я специально хотел узнать об окружающих vars. – Grodriguez