Переменная рабочий стол: Переменные среды в Windows 10: подробная инструкция

Переменные среды в Windows 10: подробная инструкция

Содержание

  • Переменные среды Windows
    • Переменные PATH и PATHEXT
    • Создание переменных среды
    • Заключение
  • Вопросы и ответы

Переменная среды (переменная окружения) – это короткая ссылка на какой-либо объект в системе. С помощью таких сокращений, например, можно создавать универсальные пути для приложений, которые будут работать на любых ПК, независимо от имен пользователей и других параметров.

Получить информацию о существующих переменных можно в свойствах системы. Для этого кликаем по ярлыку Компьютера на рабочем столе правой кнопкой мыши и выбираем соответствующий пункт.

Переходим в «Дополнительные параметры».

В открывшемся окне с вкладкой «Дополнительно» нажимаем кнопку, указанную на скриншоте ниже.

Здесь мы видим два блока. Первый содержит пользовательские переменные, а второй системные.

Если требуется просмотреть весь перечень, запускаем «Командную строку» от имени администратора и выполняем команду (вводим и нажимаем ENTER).

set > %homepath%\desktop\set.txt

Подробнее: Как открыть «Командную строку» в Windows 10

На рабочем столе появится файл с названием «set.txt», в котором будут указаны все переменные окружения, имеющиеся в системе.

Все их можно использовать в консоли или скриптах для запуска программ или поиска объектов, заключив имя в знаки процента. Например, в команде выше вместо пути

C:\Users\Имя_пользователя

мы использовали

%homepath%

Примечание: регистр при написании переменных не важен. Path=path=PATH

Переменные PATH и PATHEXT

Если с обычными переменными все понятно (одна ссылка – одно значение), то эти две стоят особняком. При детальном рассмотрении видно, что они ссылаются сразу на несколько объектов. Давайте разберемся, как это работает.

«PATH» позволяет запускать исполняемые файлы и скрипты, «лежащие» в определенных каталогах, без указания их точного местоположения. Например, если ввести в «Командную строку»

explorer.exe

система осуществит поиск по папкам, указанным в значении переменной, найдет и запустит соответствующую программу. Этим можно воспользоваться в своих целях двумя способами:

Для применения настроек, возможно, придется перезапустить «Проводник». Сделать это быстро можно так:

Открываем «Командную строку» и пишем команду

taskkill /F /IM explorer.exe

Все папки и «Панель задач» исчезнут. Далее снова запускаем «Проводник».

explorer

Еще один момент: если вы работали с «Командной строкой», ее также следует перезапустить, то есть консоль не будет «знать», что настройки изменились. Это же касается и фреймворков, в которых вы отлаживаете свой код. Также можно перезагрузить компьютер или выйти и снова зайти в систему.

Теперь все файлы, помещенные в «C:\Script» можно будет открывать (запускать), введя только их название.

«PATHEXT», в свою очередь, дает возможность не указывать даже расширение файла, если оно прописано в ее значениях.

Принцип работы следующий: система перебирает расширения по очереди, пока не будет найден соответствующий объект, причем делает это в директориях, указанных в «PATH».

Создание переменных среды

Создаются переменные просто:

  1. Нажимаем кнопку «Создать». Сделать это можно как в пользовательском разделе, так и в системном.
  2. Вводим имя, например, «desktop». Обратите внимание на то, чтобы такое название еще не было использовано (просмотрите списки).

  3. В поле «Значение» указываем путь до папки «Рабочий стол».

    C:\Users\Имя_пользователя\Desktop

  4. Нажимаем ОК. Повторяем это действие во всех открытых окнах (см. выше).

  5. Перезапускаем «Проводник» и консоль или целиком систему.
  6. Готово, новая переменная создана, увидеть ее можно в соответствующем списке.

Для примера переделаем команду, которую мы использовали для получения списка (самая первая в статье). Теперь нам вместо

set > %homepath%\desktop\set.txt

потребуется ввести только

set > %desktop%\set.txt

Заключение

Использование переменных окружения позволяет значительно сэкономить время при написании скриптов или взаимодействии с системной консолью. Еще одним плюсом является оптимизация создаваемого кода. Имейте в виду, что созданные вами переменные отсутствуют на других компьютерах, и сценарии (скрипты, приложения) с их использованием работать не будут, поэтому перед тем, как передавать файлы другому пользователю, необходимо уведомить его об этом и предложить создать соответствующий элемент в своей системе.

Распознанные переменные среды (Windows 10) — Windows Deployment





Twitter




LinkedIn




Facebook




Адрес электронной почты










  • Статья

  • Чтение занимает 6 мин

При использовании XML-файлов MigDocs. xml, MigApp.xmlи MigUser.xmlможно использовать переменные среды для определения папок, которые могут отличаться на разных компьютерах. Значения списка специальных постоянных элементов (CSIDL) позволяют определить папки, которые приложения часто используют, но могут не иметь одинаковых имен или расположений на любом компьютере. Например, папка Документы может находиться C:\Users\<Username>\My Documents на одном компьютере, а C:\Documents and Settings\<username>\My Documents на другом. В файлах и MigApp.xmlMigDoc.xml можно использовать подстановочный знак MigUser.xmlзвездочки (*). Однако в файле нельзя использовать подстановочные знаки Config.xml звездочки (*).

Переменные, обрабатываемые для операционной системы и в контексте каждого пользователя

Эти переменные можно использовать в разделах в файлах .xml с context=UserAndSystem, context=Userи context=System.

ПеременнаяОбъяснение
ALLUSERSAPPDATAТо же, что и CSIDL_COMMON_APPDATA.
ALLUSERSPROFILEСсылается на %PROFILESFOLDER%\Public или %PROFILESFOLDER%\all users.
COMMONPROGRAMFILESТо же, что и CSIDL_PROGRAM_FILES_COMMON.
COMMONPROGRAMFILES(X86)Ссылается на папку в C:\Program Files (x86)\Common Files 64-разрядных системах.
CSIDL_COMMON_ADMINTOOLSВерсия 10.0. Каталог файловой системы, содержащий средства администрирования для всех пользователей компьютера.
CSIDL_COMMON_ALTSTARTUPКаталог файловой системы, соответствующий нелокализованной группе программы запуска для всех пользователей.
CSIDL_COMMON_APPDATAКаталог файловой системы, содержащий данные приложения для всех пользователей. Типичный путь Windows — C:\ProgramData.
CSIDL_COMMON_DESKTOPDIRECTORYКаталог файловой системы, содержащий файлы и папки, которые отображаются на рабочем столе для всех пользователей. Типичный путь — C:\Users\Public\Desktop.
CSIDL_COMMON_DOCUMENTSКаталог файловой системы, содержащий общие для всех пользователей документы. Типичный путь — C:\Users\Public\Documents.
CSIDL_COMMON_FAVORITESКаталог файловой системы, который служит общим репозиторием для избранного, общего для всех пользователей. Типичный путь — C:\Users\Public\Favorites.
CSIDL_COMMON_MUSICКаталог файловой системы, который служит репозиторием для музыкальных файлов, общих для всех пользователей. Типичный путь — C:\Users\Public\Music.
CSIDL_COMMON_PICTURESКаталог файловой системы, который служит репозиторием для файлов образов, общих для всех пользователей. Типичный путь — C:\Users\Public\Pictures.
CSIDL_COMMON_PROGRAMSКаталог файловой системы, содержащий каталоги для общих групп программ, которые отображаются в меню «Пуск» для всех пользователей. Типичный путь — C:\ProgramData\Microsoft\Windows\Start Menu\Programs.
CSIDL_COMMON_STARTMENUКаталог файловой системы, содержащий программы и папки, которые отображаются в меню Пуск для всех пользователей. Типичный путь в Windows — C:\ProgramData\Microsoft\Windows\Start Menu.
CSIDL_COMMON_STARTUPКаталог файловой системы, содержащий программы, которые отображаются в папке Startup для всех пользователей. Типичный путь — C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup.
CSIDL_COMMON_TEMPLATESКаталог файловой системы, содержащий шаблоны, доступные всем пользователям. Типичный путь — C:\ProgramData\Microsoft\Windows\Templates.
CSIDL_COMMON_VIDEOКаталог файловой системы, который служит репозиторием для видеофайлов, общих для всех пользователей. Типичный путь — C:\Users\Public\Videos.
CSIDL_DEFAULT_APPDATAСсылается на папку Appdata внутри %DEFAULTUSERPROFILE%.
C SIDL_DEFAULT_LOCAL_APPDATAСсылается на локальную папку Appdata внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_COOKIESСсылается на папку Cookie внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_CONTACTSСсылается на папку «Контакты» внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_DESKTOPСсылается на папку Desktop внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_DOWNLOADSСсылается на папку Загрузки внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_FAVORITESСсылается на папку Избранное внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_HISTORYСсылается на папку History внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_INTERNET_CACHEСсылается на папку интернет-кэша внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_PERSONALСсылается на личную папку внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_MYDOCUMENTSСсылается на папку «Мои документы» внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_MYPICTURESСсылается на папку «Мои рисунки» внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_MYMUSICСсылается на папку «Моя музыка» внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_MYVIDEOСсылается на папку «Мои видео» внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_RECENTСсылается на папку Recent внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_SENDTOСсылается на папку Send To внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_STARTMENUСсылается на папку меню «Пуск» внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_PROGRAMSСсылается на папку Programs внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_STARTUPСсылается на папку Startup внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_TEMPLATESСсылается на папку Templates внутри %DEFAULTUSERPROFILE%.
CSIDL_DEFAULT_QUICKLAUNCHСсылается на папку быстрого запуска внутри %DEFAULTUSERPROFILE%.
CSIDL_FONTSВиртуальная папка, содержащая шрифты. Типичный путь — C:\Windows\Fonts.
CSIDL_PROGRAM_FILESX86Папка Program Files в 64-разрядных системах. Типичный путь — C:\Program Files(86).
CSIDL_PROGRAM_FILES_COMMONX86Папка для компонентов, которые совместно используются в приложениях в 64-разрядных системах. Типичный путь — C:\Program Files(86)\Common.
CSIDL_PROGRAM_FILESПапка Program Files. Типичный путь — C:\Program Files.
CSIDL_PROGRAM_FILES_COMMONПапка для компонентов, которые совместно используются в приложениях. Типичный путь — C:\Program Files\Common.
CSIDL_RESOURCESКаталог файловой системы, содержащий данные ресурсов. Типичный путь — C:\Windows\Resources.
CSIDL_SYSTEMСистемная папка Windows. Типичный путь — C:\Windows\System32.
CSIDL_WINDOWSКаталог Windows или корневой путь к системе. Это значение соответствует %WINDIR% переменным среды или %SYSTEMROOT% . Типичный путь — C:\Windows.
DEFAULTUSERPROFILEСсылается на значение в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList [DefaultUserProfile].
PROFILESFOLDERСсылается на значение в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList [ProfilesDirectory].
PROGRAMFILESТо же, что и CSIDL_PROGRAM_FILES.
PROGRAMFILES(X86)Ссылается на папку в C:\Program Files (x86) 64-разрядных системах.
SYSTEMСсылается на %WINDIR%\system32.
SYSTEM16Ссылается на %WINDIR%\system.
SYSTEM32Ссылается на %WINDIR%\system32.
SYSTEMDRIVEДиск, на котором хранится папка Windows. Это значение является именем диска, а не именем папки (C: не C:\).
SYSTEMPROFILEСсылается на значение в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-18 [ProfileImagePath].
SYSTEMROOTТо же, что и WINDIR.
WINDIRСсылается на папку Windows, расположенную на системном диске.

Переменные, распознаваемые только в контексте пользователя

Эти переменные можно использовать в файлах .xml в разделах с помощью context=User и context=UserAndSystem.

ПеременнаяОбъяснение
APPDATAТо же, что и CSIDL_APPDATA.
CSIDL_ADMINTOOLSКаталог файловой системы, используемый для хранения средств администрирования для отдельного пользователя. Консоль управления Майкрософт ® (MMC) сохраняет настраиваемые консоли в этом каталоге, который перемещается вместе с профилем пользователя.
CSIDL_ALTSTARTUPКаталог файловой системы, соответствующий нелокализованной группе программы запуска пользователя.
CSIDL_APPDATAКаталог файловой системы, который служит общим репозиторием для данных конкретного приложения. Типичный путь — C:\Users\<username>\AppData\Roaming.
CSIDL_BITBUCKETВиртуальная папка, содержащая объекты в корзине пользователя.
CSIDL_CDBURN_AREAКаталог файловой системы, выступающий в качестве промежуточной области для файлов, ожидающих записи на компакт-диск. Типичный путь — C:\Users\<username>\AppData\Local\Microsoft\Windows\MasteredBurning\Disc Burning.
CSIDL_CONNECTIONSВиртуальная папка, представляющая сетевые подключения, содержащая сетевые подключения и подключения удаленного доступа.
CSIDL_CONTACTSЭто значение ссылается на папку Контакты в %CSIDL_PROFILE%.
CSIDL_CONTROLSВиртуальная папка, содержащая значки для элементов панель управления.
CSIDL_COOKIESКаталог файловой системы, который служит общим репозиторием для файлов cookie в Интернете. Типичный путь — C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Cookies.
CSIDL_DESKTOPВиртуальная папка, представляющая рабочий стол Windows.
CSIDL_DESKTOPDIRECTORYКаталог файловой системы, используемый для физического хранения файловых объектов на рабочем столе, который не следует путать с самой папкой рабочего стола. Типичный путь — C:\Users\<username>\Desktop.
CSIDL_DRIVESВиртуальная папка , представляющая «Мой компьютер», которая содержит все, что находится на локальном компьютере: запоминающие устройства, принтеры и панель управления. Папка также может содержать сопоставленные сетевые диски.
CSIDL_FAVORITESКаталог файловой системы, который служит общим репозиторием для избранного пользователя. Типичный путь — C:\Users\<username>\Favorites.
CSIDL_HISTORYКаталог файловой системы, который служит общим репозиторием для элементов журнала Интернета.
CSIDL_INTERNETВиртуальная папка для Internet Explorer.
CSIDL_INTERNET_CACHEКаталог файловой системы, который служит общим репозиторием для временных файлов в Интернете. Типичный путь : C:\Users\<username>\AppData\Local\Microsoft\Windows\Temporary Internet Files
CSIDL_LOCAL_APPDATAКаталог файловой системы, который служит репозиторием данных для локальных, не перемещаемых приложений. Типичный путь — C:\Users\<username>\AppData\Local.
CSIDL_MYDOCUMENTSВиртуальная папка, представляющая стандартный путь «Мои документы. A», — .C:\Users\<username>\Documents
CSIDL_MYMUSICКаталог файловой системы, который служит общим репозиторием для музыкальных файлов. Типичный путь — C:\Users\<username>\Music.
CSIDL_MYPICTURESКаталог файловой системы, который служит общим репозиторием для файлов изображений. Типичный путь — C:\Users\<username>\Pictures.
CSIDL_MYVIDEOКаталог файловой системы, который служит общим репозиторием для видеофайлов. Типичный путь — C:\Users\<username>\Videos.
CSIDL_NETHOODКаталог файловой системы, содержащий объекты ссылок, которые могут существовать в виртуальной папке «Мои сетевые расположения». Это не то же самое, что CSIDL_NETWORK, который представляет корневой каталог сетевого пространства имен. Типичный путь — C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Network Shortcuts.
CSIDL_NETWORKВиртуальная папка, представляющая «Мои сетевые расположения», корень иерархии сетевого пространства имен.
CSIDL_PERSONALВиртуальная папка, представляющая элемент рабочего стола «Мои документы». Это значение эквивалентно CSIDL_MYDOCUMENTS. Типичный путь — C:\Documents and Settings\<username>\My Documents.
CSIDL_PLAYLISTSВиртуальная папка, используемая для хранения альбомов воспроизведения, обычно .C:\Users\<username>\My Music\Playlists
CSIDL_PRINTERSВиртуальная папка, содержащая установленные принтеры.
CSIDL_PRINTHOODКаталог файловой системы, содержащий объекты связи, которые могут существовать в виртуальной папке Принтеры. Типичный путь — C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Printer Shortcuts.
CSIDL_PROFILEПапка профиля пользователя. Типичный путь — C:\Users\<username>.
CSIDL_PROGRAMSКаталог файловой системы, содержащий группы программ пользователя, которые сами являются каталогами файловой системы. Типичный путь — C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs.
CSIDL_RECENTКаталог файловой системы, содержащий ярлыки для последних использованных документов пользователя. Типичный путь — C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Recent.
CSIDL_SENDTOКаталог файловой системы, содержащий пункты меню «Отправить «. Типичный путь — C:\Users\<username>\AppData\Roaming\Microsoft\Windows\SendTo.
CSIDL_STARTMENUКаталог файловой системы, содержащий элементы меню «Пуск «. Типичный путь — C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu.
CSIDL_STARTUPКаталог файловой системы, соответствующий группе программы запуска пользователя. Типичный путь — C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.
CSIDL_TEMPLATESКаталог файловой системы, который служит общим репозиторием для шаблонов документов. Типичный путь — C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Templates.
HOMEPATHТо же, что и стандартная переменная среды.
TEMPВременная папка на компьютере. Типичный путь — %USERPROFILE%\AppData\Local\Temp.
TMPВременная папка на компьютере. Типичный путь — %USERPROFILE%\AppData\Local\Temp.
USERPROFILEТо же, что и CSIDL_PROFILE.
USERSIDПредставляет текущий идентификатор безопасности учетной записи пользователя . Например, S-1-5-21-1714567821-1326601894-715345443-1026.

Справочник по XML-файлу USMT









окон. Что такое переменная среды для пути к рабочему столу?

Я пишу пакетный файл Windows и хочу что-то скопировать на рабочий стол. Я думаю, что могу использовать это:

%UserProfile%\Desktop\

Однако я думаю, что это, вероятно, будет работать только на английской ОС. Есть ли способ сделать это в пакетном файле, который будет работать в любой интернационализированной версии?

ОБНОВЛЕНИЕ

Я попробовал следующий пакетный файл:

 REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop
FOR /F "usebackq tokens=3 skip=4" %%i in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) DO SET DESKTOPDIR=%%i
FOR /F "usebackq delims=" %%i in (`ECHO %DESKTOPDIR%`) DO SET DESKTOPDIR=%%i
ЭХО %DESKTOPDIR%
 

И получил этот вывод:

S:\>REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Папки оболочки пользователя
    Рабочий стол REG_EXPAND_SZ %USERPROFILE%\Рабочий стол
S:\>FOR /F "usebackq tokens=3 skip=4" %i in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folder
s" /v Desktop`) DO SET DESKTOPDIR=%i
S:\>FOR /F "usebackq delims=" %i in (`ECHO ECHO включено. `) DO SET DESKTOPDIR=%i
S:\>SET DESKTOPDIR=ECHO включен.
S:\>ЭХО ЭХО включено.
ЭХО включено.
 
  • windows
  • powershell
  • vbscript
  • локализация
  • рабочий стол

3

В целях безопасности следует использовать соответствующие API-интерфейсы в Powershell (или VBScript)
Использование PowerShell:

 [Environment]::GetFolderPath("Desktop")
 

Скопируйте что-нибудь с помощью Powershell:

 Copy-Item $home\*.txt ([Environment]::GetFolderPath("Desktop"))
 

Вот пример VBScript для получения пути к рабочему столу:

 dim WSHShell, рабочий стол, строка пути, objFSO
установить objFSO=CreateObject("Scripting.FileSystemObject")
Установите WSHshell = CreateObject("WScript.Shell")
рабочий стол = WSHShell.SpecialFolders("Рабочий стол")
строка пути = objFSO.GetAbsolutePathName(рабочий стол)
Строка пути WScript.Echo
 

2

Я обнаружил, что лучшим решением является использование vbscript вместе с командным файлом.

Вот командный файл:

 @ECHO OFF
FOR /F "usebackq delims=" %%i in (`cscript findDesktop.vbs`) DO SET DESKTOPDIR=%%i
ЭХО %DESKTOPDIR%
 

Вот файл findDesktop.vbs:

 set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Рабочий стол")
wscript.echo(strDesktop)
 

Могут быть и другие решения, но лично я нахожу это менее хакерским.

Я проверил это на английском ПК, а также на французском ПК — вроде работает (Windows XP).

РЕДАКТИРОВАТЬ: Используйте принятый ответ, это не сработает, если расположение по умолчанию не используется, например: пользователь переместил рабочий стол на другой диск, например D:\Desktop


По крайней мере, в Windows XP, Vista и 7 вы можете безопасно использовать "%UserProfile%\Desktop" .

Windows XP en-US расширяется до "C:\Documents and Settings\YourName\Desktop"
Windows XP pt-BR расширяется до "C:\Documents and Settings\YourName\Desktop"
Windows 7 en-US расширяется до "C:\Users\YourName\Desktop"
Windows 7 pt-BR расширяется до "C:\Usuarios\YourName\Desktop"

В XP вы не можете использовать это для других папок, кроме рабочего стола.
Мои документы превращаются в Meus Documentos и Локальные настройки в Местные настройки Лично я думаю, что это плохо при проектировании ОС.

7

Ответ КБ на использование [Environment]::GetFolderPath("Desktop") , очевидно, является официальным Windows API для этого.

Однако, если вы работаете в интерактивном режиме с командной строкой или просто хотите, чтобы что-то работало на вашем компьютере, символ тильды (~) указывает на домашнюю папку текущего пользователя. Так ~/desktop — папка пользователя на рабочем столе.

3

Мало того, что это не сработает для международной версии Windows, это не сработает, если пользователь отредактировал реестр, чтобы его папка рабочего стола находилась где-то еще. Вы можете запросить в реестре расположение файла с помощью команды REG :

 REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop
 

Чтобы получить это в переменной, используйте что-то вроде этого:

 FOR /F "usebackq tokens=3 skip=4" %%i in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Папки" /v Desktop`) DO SET DESKTOPDIR=%%i
FOR /F "usebackq delims=" %%i in (`ECHO %DESKTOPDIR%`) DO SET DESKTOPDIR=%%i
ЭХО %DESKTOPDIR%
 

4

вы также можете открыть командную строку DOS и выполнить команду set .

Это даст вам представление о том, какие переменные среды доступны в вашей системе.

— поскольку вы специально просите неанглоязычную Windows — вот пример моего собственного German Edition (Window7-64bit) :

установить > env.txt
введите env.txt
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\SOF\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=VMSOF
ComSpec=C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK=НЕТ
ДОМАШНИЙ=С:
ДОМАШНИЙ ПУТЬ=\Пользователи\СОФ
LOCALAPPDATA=C:\Users\SOF\AppData\Local
ЛОГОНСЕРВЕР=\\VMSOF
NUMBER_OF_PROCESSORS=2
ОС=Windows_NT
Путь=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\ Program Files (x86)\CMake 2.8\bin;C:\Program Files (x86)\emacs-22.3\bin;C:\Program Files (x86)\GnuWin32\bin;
PATHEXT=.COM;.EXE;. BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
ПРОЦЕССОР_АРХИТЕКТУРА=AMD64
PROCESSOR_IDENTIFIER=AMD64 Family 15 Model 67 Stepping 3, AuthenticAMD
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=4303
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
ПОДСКАЗКА=$P$G
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
ПУБЛИК=C:\Пользователи\Общедоступный
SESSIONNAME=Консоль
Системный диск = C:
Системный корень=C:\Windows
TEMP=C:\Users\SOF\AppData\Local\Temp
TMP=C:\Users\SOF\AppData\Local\Temp
ДОМЕН ПОЛЬЗОВАТЕЛЯ=VMSOF
ИМЯ ПОЛЬЗОВАТЕЛЯ=СОФ
ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ=C:\Users\SOF
VBOX_INSTALL_PATH=C:\Program Files\Sun\VirtualBox\
ВС90COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\
ветер=C:\Windows
 

4

в Windows 7 возвращает путь к рабочему столу:

FOR /F "usebackq tokens=3" %%i in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) DO SET DESKTOPDIR=%%i
FOR /F "usebackq delims=" %%i in (`ECHO %DESKTOPDIR%`) DO SET DESKTOPDIR=%%i
ЭХО %DESKTOPDIR%
 

Если вы хотите использовать

 [Environment]::GetFolderPath("Desktop")
 

из cmd. exe , вы можете сделать это (спасибо пользователю MS Marian Pascalau в этой теме)

 set dkey=Desktop
set dump=powershell.exe -NoLogo -NonInteractive "Write-Host $([System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::%dkey%))"
для /F %%i в ('%dump%') установить dir=%%i
echo Каталог рабочего стола: %dir%
 

Это не решение, но я надеюсь, что оно поможет: это близко, за исключением того, что когда KEY = %userprofile%\desktop, происходит сбой копирования, даже если zdesktop=%userprofile%\desktop. Я думаю, потому что встроенный %userprofile% не переводится.

 REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop>z.out
for /f "tokens=3 skip=4" %%t in (z.out) установить zdesktop=%%t
скопировать мой значок %zdesktop%
установить zрабочий стол =
дель z.out
 

Таким образом, он успешно анализирует ключ REG, но если ключ содержит встроенный %var%, он не преобразуется во время команды копирования.

У меня была похожая проблема (и VBScript или PowerShell не подходили), и код, который я нашел в этой статье, у меня не работал. У меня были проблемы с версиями ОС и языковыми версиями. После некоторых экспериментов я пришел к этому решению:

 for /f "usebackq tokens=2,3*" %%A in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Desktop"`) do if %% A==Вызов REG_EXPAND_SZ :reparse set desktopdir=%%B
эхо %desktopdir%
перейти :EOF
:повторная обработка
%*
перейти :EOF
 

Этот код работает для меня в английской и польской версиях Windows 7 и Windows XP.

Подпрограмма :reparse позволяет отложенное развертывание переменных среды.

Хотя я понимаю, что это немного старая запись, я подумал, что это может помочь людям в похожей ситуации. Я сделал быструю одну строку VBScript, чтобы получить информацию для любой специальной папки, которую вы хотели бы (хотя без проверки ошибок), и это работает следующим образом:

Создайте файл GetShellFolder. vbs со следующей строкой:

 WScript.Echo WScript.CreateObject("WScript.Shell").SpecialFolders(WScript.Arguments(0))
 

Я всегда копирую cscript.exe (32-разрядная версия) в ту же папку, что и пакетный файл, из которого я запускаю это, я предполагаю, что вы делаете то же самое (у меня были ситуации, когда пользователи каким-то образом удаляли C :\Windows\system32 со своего пути, либо удалось избавиться от cscript.exe, либо он заражен, либо по какой-то другой причине не работает). 9″‘) УСТАНОВИТЬ SHELLDIR=%%i
копировать /y «%~dp0<файл_в_копию>» «%SHELLDIR%\<файл_в_копию>»

В приведенном выше коде вы можете заменить «Рабочий стол» любой допустимой специальной папкой (Избранное, StartMenu и т. д. — полный официальный список находится по адресу https://msdn.microsoft.com/en-us/library/0ea7b5xe%28v). =vs.84%29.aspx) и, конечно же, с фактическим файлом, который вы хотите поместить туда. Это избавляет вас от попыток получить доступ к реестру (что вы все равно не можете сделать как пользователь с ограниченными правами) и должно быть достаточно простым, чтобы адаптироваться к нескольким приложениям.

О, и для тех, кто не знает, "%~dp0" — это просто каталог, из которого вызывается скрипт. Он также работает для путей UNC, что делает пакетный файл, использующий его, чрезвычайно переносимым. Это специально заканчивается конечным «\», хотя на первый взгляд это может выглядеть немного странно.

Ответ @Dave Webb, вероятно, правильный. Единственное, о чем я могу думать, это CSIDL:

.

CSIDL_DESKTOPDIRECTORY

Каталог файловой системы, используемый для
физически хранить файловые объекты на
рабочий стол (который не следует путать
с самой папкой рабочего стола). А
типичный путь C:\Documents и
Настройки\Имя пользователя\Рабочий стол. 9|find «_SZ»‘) DO set desktop=%%G
set desktop1=%desktop:*USERPROFILE%\=%
cd «%userprofile%\%desktop1%»
set getdesk=
set desktop1=
set desktop=

Это должно работать независимо от языковой версии Windows и от того, где находится папка. Также не имеет значения, есть ли пробелы в пути к папке. |find /i «REG_»‘ ) установите «batch_publicdesktop=%%a»
:: удалить все до «_SZ» включительно
установить «batch_userdesktop=%batch_userdesktop:*_sz=%»
установить «batch_publicdesktop=%batch_publicdesktop:*_sz=%%
:: удалить начальные пробелы и TAB
:петля
если «%batch_userdesktop:~0,1%»==» » установить «batch_userdesktop=%batch_userdesktop:~1%» и перейти к циклу
если «%batch_publicdesktop:~0,1%»==» » установить «batch_publicdesktop=%batch_publicdesktop:~1%» и перейти к циклу
если «%batch_userdesktop:~0,1%»==» » установить «batch_userdesktop=%batch_userdesktop:~1%» и перейти к циклу
если «%batch_publicdesktop:~0,1%»==» » установить «batch_publicdesktop=%batch_publicdesktop:~1%» и перейти к циклу

Последние две строки включают TAB внутри » «, некоторые текстовые редакторы добавляют пробелы, когда вы нажимаете TAB, поэтому убедитесь, что вы используете настоящую TAB вместо пробелов.

Я не уверен, что код требует setlocal enabledelayedexpansion, это часть моего SETVARS.CMD, который я вызываю из других пакетов для установки общих переменных, таких как архитектура процессора, язык учетной записи, версия Windows и пакет обновления, путь к пользовательскому/общедоступному рабочему столу, и т. д.

Я знаю, что это старая тема, но я бы использовал переменную Powershell

 $env:UserProfile
 

Чтобы использовать его для доступа к рабочему столу, это будет:

 cd $env:UserProfile\desktop
 

Это работает как локально, так и удаленно в Windows 7. Надеюсь, это полезно, поскольку я столкнулся с ситуацией, когда клиентский компьютер не имел значения в $home.

1

Довольно старая тема. Но я хочу дать свои 2 цента …

Я немного изменил решение tomasz86, чтобы выглядеть в старом стиле «Папки оболочки» вместо «Папки оболочки пользователя», поэтому мне не нужно расширять envvar % профиль пользователя%

Также нет зависимости от powershell/vbscript/etc….

 for /f "usebackq tokens=2,3*" %%A in (`REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\ Explorer\Shell Folders" /v "Рабочий стол"`) делать, если %%A==REG_SZ set desktopdir=%%B
эхо %desktopdir%
 

Надеюсь, это поможет.

TL;DR

%HOMEDRIVE%%HOMEPATH%\Desktop кажется самым безопасным способом.

Обсуждение

Предположения о том, на каком диске находится объект, в Windows довольно ненадежны, поскольку в ней отсутствует единое дерево каталогов, в котором монтирования сопоставлялись бы с каталогами внутри. Поэтому Переменная %HOMEDRIVE% важна для ссылки, чтобы убедиться, что вы находитесь на правильном (это не всегда C:\ !).

Неанглийские локали обычно имеют локализованные имена для таких вещей, как «Рабочий стол» и «Изображения» и тому подобное, но, к счастью, все они являются псевдонимами, указывающими на Рабочий стол , который, по-видимому, является основным каноническим именем каталога независимо от локали ( мы безопасно используем это здесь, в Японии, Таиланде, Израиле и США).

Большая причуда связана с определением того, является ли %UserProfile% указывает на фактический базовый каталог профиля пользователя, или на его рабочий стол, или на что-то совершенно другое. Я на самом деле не разработчик Windows, но я обнаружил, что каталог профиля предназначен для настроек, а % HOMEPATH% — для собственных файлов пользователя, поэтому он указывает на корень каталога, который ведет к рабочему столу/загрузкам. /Фотографии/и т.д. Это делает %HOMEDRIVE%%HOMEPATH%\Desktop самым безопасным способом.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Переменная рабочего стола PowerShell –

спросил

Изменено
9 месяцев назад

Просмотрено
84k раз

Я пытаюсь написать сценарий PowerShell для удаления значка на рабочем столе для Chrome после установки через sccm. Однако рабочие столы некоторых пользователей в сети направляются в разные папки в сети. Есть ли в PowerShell переменная, в которой хранится расположение рабочего стола?

Я искал в Интернете и искал с помощью Get-Variable | Out-String , но я ничего не нашел. Готовый код должен выглядеть так:

 If (Test-Path "$DesktopLocation\Google Chrome.lnk"){
    Remove-Item "$DesltopLocation\Google Chrome.lnk"
}
 
  • powershell
  • рабочий стол

Вы можете использовать метод Environment.GetFolderPath() , чтобы получить полный путь к специальным папкам:

 $DesktopPath = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::Desktop)
 

Это можно сократить до:

 $DesktopPath = [Environment]::GetFolderPath("Desktop")
 

Вы также можете получить общую папку рабочего стола «AllUsers» (если файл ярлыка является общим для всех пользователей):

 [Environment]::GetFolderPath("CommonDesktopDirectory")
 

Ознакомьтесь с полным списком значений для SpecialFolder Enum.