На самом деле очень интересная задача))
В Windows папка рабочего стола пользователя может быть везде.
Во-первых, она зависит от имени пользователя - у каждого пользователя в Windows свой рабочий стол.
Во-вторых, она зависит от locale в Windows (языковая версия): в американской Windows это действительно %USERPROFILE%\Desktop. А в, например, шведской Windows это %USERPROFILE%\Skrivbord. А в русской Windows это вообще папка из двух слов "%USERPROFILE%\Рабочий стол". Поверьте, в японской версии там вообще туши свет. А именно папки Desktop может и не быть вовсе, конечно, последние версии 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
Теперь у нас в переменной %Desktop% путь до рабочего стола текущего пользователя.
Это работает на всех Windows, которые были за последние двадцать лет.
Казалось бы, путь, куда копировать, есть, команда copy from to и дело в шляпе!
Вот только проблема у нас. Этот путь в Win-кодировке, а в батниках надо указывать Oem-кодировку.
Попытка выполнить copy приведет нас к ошибке, что пути %USERPROFILE%\╨рсюўшщ ёЄюы (именно так выглядит "Рабочий стол" в oem-кодировке) не существует. И не поспоришь, ведь его действительно не существует.
Поэтому вам придется использовать костыль - программу которая перекодирует текст из win-кодировки в oem-кодировку.
Встроенных в ОС программ для перекодировки мне найти не удалось (если это не так, поделитесь со мной в комментах об этом). Поэтому вам придется скачать программу convertcp.exe с сайта https://sourceforge.net/projects/convertcp/ - она поможет нам в преобразовании кодировок. Программа бесплатная, исходный код присутствует.
После скачивания архива с сурсфоррджа распаковываете программу и кладете ее около батничка.
Проверяете ее характеристики:
Size: 33792 байта, CRC32: 976A4F90, CRC64: D84D3EF1D439BDCD, SHA256: 9612F482E5261E68712EBF8BB4BEDA5AF6EA3BFC9D926062BD602AFE88C82FEB, SHA1: CCFCEF79D7CCCD4B30DD08DA9D3A59B61B63352A
BLAKE2sp: 4B0AC330F738268C28DE18F922BF4471DB37739839C9EA41C85B5F5AAA2D1E67
Вот окончательный вариант батника, который копирует файл readme.txt на рабочий стол текущего пользователя.
@echo off
setlocal enableextensions
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%|convertcp.exe 0 1 >tmpfile
set /p DesktopWin=<tmpfile
del tmpfile
copy readme.txt "%DesktopWin%\\" </b
Другие языки программирования и технологии
как копировать файл на рабочий стол файлом .bat не зная имя пользователя?
%USERPROFILE%\Desktop
Похожие вопросы
- Как в бат файле указать адрес рабочего стола?
- Командный файл, который выводит список файлов, находящихся в домашнем каталоге пользователя и недоступных ему по чтению.
- Напишите все возможные команды для файла .bat Прошу некоторые я знаю, а сложные я не знаю.
- кто знает какие-нить приколы с файлом bat???
- подскажите пожайлуста, что за файл такой sej5345c.exe,???появился на рабочем столе и не удаляется ...
- как указать путь к файлу через DOS если фаил установлен (он же и .exe фаил) в диске С: на рабочем столе???
- Влияет ли на загрузку ПК с ОС WinXP нахождение на «Рабочем столе» файлов или папок большого размера?
- Мне нужно создать файл .bat который будет через 1 час перезагружать компьютер... Напишите код под хр?
- где сделать файл .BAT
- Настройка рабочего стола
copy readme.txt "%DesktopWin%\\" >>logfile
endlocal
pause
В качестве бонуса около батничка пишется лог-файл. Если он не нужен, то у команды copy стираете перенаправление.
Если кому чего не понятно, комменты есть))