Лента Мой малыш
Городские форумы
Автофорумы
Халявный
Домоводство
Проф. и бизнес форумы
Строительные форумы
Технофорумы
Собачий форум
Велофорумы Нижнего Новгорода
Наши дети
Туризм, отдых, экстрим Творческий
Путешествия Спортивные форумы
Нижегородская область Недвижимость
Форумы по интересам
Частные форумы Форумы домов Жилые районы
Отзывы и предложения (техподдержка)
Реклама на NN.RU
+7 (831) 261-37-60
Техподдержка Полная версия

Помогит с батником

Чувствую себя оленем
Суть - взять значение текущего расположения папки рабочего стола из реестра, и копирнуть туда из текущей для батника папки файл.
For /F "Tokens=2* Delims= " %%I In ('Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /V "Desktop"') Do Set desktop-path=%%J
echo %desktop-path%
copy file.txt %desktop-path%
Выдача
%USERPROFILE%\Desktop
Системе не удается найти указанный путь.
Скопировано файлов: 0.
0
Ответить
а зачем вообще из реестра что-то дёргать?
%USERPROFILE%\Desktop и так заведомо известна
1
Ответить
есть 2 предположения:
1. не может сделать двойную подстановку в одной команде copy file.txt %desktop-path%
2. не хватает слэша в конце copy file.txt %desktop-path%\

а просто команда "copy file.txt %USERPROFILE%\Desktop" работает?
0
Ответить
что я делаю не так?

D:\>echo 12345 > 1.txt

D:\>dir
Том в устройстве D имеет метку Новый том
Серийный номер тома: D415-4865

Содержимое папки D:\

15.06.2017 13:16 8 1.txt
...

D:\>copy 1.txt %USERPROFILE%\Desktop
Скопировано файлов: 1.


там возникает нюанс при переходе между дисками, ибо "cd" не работает
0
Ответить
в 10-ке не известна, как оказалось
Я по началу так и сделал, но файл копировался хрен пойми куда.
0
Ответить
В батнике получается двойная подстановка, в bash для этого надо сделать eval.
Подозреваю, в винде тоже надо что-то ещё подставить.
2
Ответить
K0IIIAK писал(а)
что я делаю не так?

не знаю. Как такой вариант? Положите куда-нибудь не на systemdrive
0
Ответить
Warwar писал(а)
copy file.txt %USERPROFILE%\Desktop

да, работает и слэш не помогает - сам думал на это.
0
Ответить
действительно

c:\>C:\test.bat

c:\>For /F "Tokens=2* Delims= " %I In ('Reg Query "HKEY_CURRENT_USER\Software
\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /V "Desktop"') Do
Set desktop-path=%J

c:\>Set desktop-path=Folders

c:\>Set desktop-path=%USERPROFILE%\Desktop

c:\>echo %USERPROFILE%\Desktop
%USERPROFILE%\Desktop

c:\>copy file.txt %USERPROFILE%\Desktop
Системе не удается найти указанный путь.
Скопировано файлов: 0.

c:\>pause
Для продолжения нажмите любую клавишу . . .

c:\>copy file.txt %USERPROFILE%\Desktop
Скопировано файлов: 1.

c:\>
0
Ответить
RealVaVa писал(а)
из текущей для батника папки

А точно идёт попытка скопировать именно из текущей для батника папки? Не запускается ли батник от другой учётки с её переменными окружения? А если прописать полный путь к file.txt?
0
Ответить
Даже если он и запускается из-под другой учётки, у неё должен быть свой каталог рабочего стола. Так? А тут всё же "Системе не удается найти указанный путь. "
0
Ответить
у меня вот так заработало , win 7


For /F "Tokens=2* Delims= " %%I In ('Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /V "Desktop"') Do Set desktop-path=%%J
echo %desktop-path%
P = eval %desktop-path%
copy file.txt P
pause
1
Ответить
Гуглю на эту тему - ничего внятного найти не могу.
Вот, например - stackoverflow.com/questions/34103871/batch-dynamic-variable-name-eval-equivalent
0
Ответить
Ниже Кошак написал же...
Set desktop-path=%USERPROFILE%\Desktop

не, пардон, я понял... из реестра прилетает с %%
0
Ответить
K0IIIAK писал(а)
For /F "Tokens=2* Delims= " %%I In ('Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /V "Desktop"') Do Set desktop-path=%%J
echo %desktop-path%
P = eval %desktop-path%
copy file.txt P
pause

Хы. Реальне! Спасиб!
0
Ответить
стоп. что-то не так. на рабочем столе файлик не появляется
0
Ответить
да-да, файл Р создаётся рядом с батником
0
Ответить
В общем, кажется мне, что проблема в содержимом переменной %desktop-path%. Пробел лишний сзади или ещё что-то, возможно какие-то строковые проблемы или кодировка.

Ибо вот так-то работает:
SET mytemp=%USERPROFILE%\Desktop
ECHO %mytemp%
COPY file.txt %mytemp%
0
Ответить
проблема в том, что параметр задаётся выше, и там пробелов нет)) Хотя... он же берётся из реестра и там тож чот не очень прозрачно.
0
Ответить
Ничего не понял. Я говорю, что переменная содержит некорректную строку, полученную криво из реестра.
0
Ответить
For /F "Tokens=2* Delims= " %%I In ('Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /V "Desktop"') Do Echo %%J>text.txt

Судя по этому выводу, пробела нет. Параметр получается правильно.
0
Ответить
Попробуй так
xcopy file "%USERPROFILE%\Desktop"
0
Ответить
Do Set desktop-path=%%J заменить на Do call Set desktop-path=%%J - раскроет %USERPROFILE% в реальный путь.
3
Ответить
ВОТ. Вот она рыба моей мечты. ЯЗЬ!

Спасибо. Сработало.
0
Ответить
создаётся рядом папка с именем %USERPROFILE% и внутри файл Desktop
0
Ответить