2013-09-05 4 views
6

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

%~dp0 

, но я хочу знать, как получить путь рабочего стола пользователя (я использую Widows 7 Ultimate)

Есть предложения?

+0

Вы должны указать версию Windows (* IF *, вы находитесь под окнами), вопрос (без версии ОС) ** не имеет ** уникального ответа. – gmo

ответ

1

Я думаю, что это один должен быть слишком хорошо

%systemdrive%\Documents and Settings\All Users\Desktop 

С уважением

+1

@ Jack_111 - Это работает на XP, но не работает на Win 7. Вы действительно должны принять ответ Мали, поскольку он более общий. Ваше решение также хорошо, но не у всех есть доступ к реестру (я не на своем рабочем месте) – dbenham

+0

Это фактически ** работает ** в Windows 7.Для обратной совместимости «Документы и настройки» и связанные с ними каталоги зеркалируются, поэтому более старые установщики будут работать правильно. (проверено на windows 7 x64) –

+1

@ Jack_111 проблема с этим решением заключается в том, что он помещает файлы на рабочий стол, доступные для всех пользователей. Таким образом, все пользователи компьютера могут получить к ним доступ, а не только пользователь, выполняющий сценарий. Где, как ответ Malis, делает именно то, что вы просили: укажите местоположение рабочего стола текущего пользователя. – Ichixgo

3

Я нашел ответ

Regedit /e /a dd.txt  

"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" 

find /i dd.txt "Desktop" >d.txt 
For /F "tokens=2 delims==" %%a in (d.txt) do set mydesktop=%%a 
+0

или простейший 0 user_profile% \ desktop Если рабочий стол находится в профиле пользователя, и это обычный и обычный случай –

+1

Этот ответ уже был задан Мали. Не пытайтесь быть героем здесь ;-) –

53

Я полагаю, вы под окнами Environnement, так %USERPROFILE%\Desktop должно быть нормально

+1

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

+0

это должен быть принятый ответ – Abdelouahab

+0

Не работает на моем рабочем ноутбуке (Windows 7). Решение kgimpel выводит правильный ('D: \ Users \% USERNAME% \ Desktop'). Похоже, что '% USERPROFILE%' может быть непостоянным в некоторых контекстах. – Amessihel

15

Это местонахождение рабочего стола:

%userprofile%\desktop 
+1

Не работает, если рабочий стол был переназначен где-то в другом месте. – Jarryd

10

Если Desktop местоположения в другую папку только это будет правильный ответ:

Batch строка:

for /f "usebackq tokens=3*" %%D IN (`reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) do set DESKTOP=%%D 

V2 (Работает с пробелами) 4.10.2016:

for /f "usebackq tokens=1,2,*" %%B IN (`reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) do set DESKTOP=%%D 

Если у вас есть n на-ASCII символов, вы также должны преобразовать кодировку ANSI в OEM, пример для кириллицы:

CHCP 1251 >Nul 
for /f "usebackq tokens=1,2,*" %%B IN (`reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop`) do set DESKTOP=%%D 
CHCP 866 >Nul 
for /f "delims=" %%i IN ('echo %DESKTOP%') do set DESKTOP=%%i 

Затем просто использовать:

echo %DESKTOP% 
+0

Не работает, когда путь имеет пробелы – user

+0

@user v2 работает, посмотрите сообщение, спасибо – kgimpel

+0

Отлично, спасибо за исправление, +1 к вам. Я также добавил к вашему ответу небольшую информацию и код для обработки кодировки, надеюсь, что вы не возражаете. – user