Я использую этот код для получения путей к рабочему столу пользователя и общедоступному рабочему столу из реестра, протестированного на 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 и пакет обновления, путь к пользовательскому / общедоступному рабочему столу и т. д.