Какая переменная среды для пути к рабочему столу? - PullRequest
59 голосов
/ 04 января 2010

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

% UserProfile% \ Desktop \

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

UPDATE

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

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
ECHO %DESKTOPDIR%

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

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

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
    Desktop    REG_EXPAND_SZ    %USERPROFILE%\Desktop


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 is on.`) DO SET DESKTOPDIR=%i

S:\>SET DESKTOPDIR=ECHO is on.

S:\>ECHO ECHO is on.
ECHO is on.

Ответы [ 15 ]

1 голос
/ 11 ноября 2016

Я использую этот код для получения путей к рабочему столу пользователя и общедоступному рабочему столу из реестра, протестированного на Windows XP SP2 pt-PT и Windows 10 b14393 en-US, поэтому он, вероятно, работает в Vista / 7/8 и других языках.

:: get user desktop and public desktop paths
for /f "tokens=* delims= " %%a in ('reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop ^|find /i "REG_"') do set "batch_userdesktop=%%a"
for /f "tokens=* delims= " %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Common Desktop" ^|find /i "REG_"') do set "batch_publicdesktop=%%a"

:: remove everything up to and including "_SZ"
set "batch_userdesktop=%batch_userdesktop:*_sz=%"
set "batch_publicdesktop=%batch_publicdesktop:*_sz=%%

:: remove leading spaces and TABs
:loop
if "%batch_userdesktop:~0,1%"==" " set "batch_userdesktop=%batch_userdesktop:~1%" & goto loop
if "%batch_publicdesktop:~0,1%"==" " set "batch_publicdesktop=%batch_publicdesktop:~1%" & goto loop
if "%batch_userdesktop:~0,1%"=="    " set "batch_userdesktop=%batch_userdesktop:~1%" & goto loop
if "%batch_publicdesktop:~0,1%"=="  " set "batch_publicdesktop=%batch_publicdesktop:~1%" & goto loop

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

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

1 голос
/ 27 июня 2013

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

FOR /F "tokens=2*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop^|FIND/I "desktop"') DO SET Desktop=%%B
ECHO %Desktop%

В случае Windows 2000 (и, вероятно, NT 4.0) вам необходимо вручную скопировать reg.exe в папку% windir%, поскольку она там по умолчанию недоступна.

1 голос
/ 27 марта 2013

Многоязычная версия, протестирована на японской ОСПакетный файл

set getdesk=REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop<br />
FOR /f "delims=(=" %%G IN ('%getdesk% ^|find "_SZ"') DO set desktop=%%G<br />
set desktop1=%desktop:*USERPROFILE%\=%<br />
cd "%userprofile%\%desktop1%"<br />
set getdesk=<br />
set desktop1=<br />
set desktop=<br />
1 голос
/ 04 января 2010

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

CSIDL_DESKTOPDIRECTORY

Каталог файловой системы, используемый для физически хранить файловые объекты на рабочий стол (который не следует путать с самой папкой рабочего стола). типичный путь - это C: \ Documents and Settings \ имя пользователя \ Desktop.

Я понятия не имею, как получить их из командной строки.

0 голосов
/ 09 ноября 2014

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

$env:UserProfile 

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

cd $env:UserProfile\desktop

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

...