--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

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

Сисадминское
6
30
С друзьями на NN.RU
В социальных сетях
Поделиться
RealVaVa
15.06.2017
Чувствую себя оленем
Суть - взять значение текущего расположения папки рабочего стола из реестра, и копирнуть туда из текущей для батника папки файл.
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.
K0IIIAK
15.06.2017
а зачем вообще из реестра что-то дёргать?
%USERPROFILE%\Desktop и так заведомо известна
RealVaVa
15.06.2017
в 10-ке не известна, как оказалось
Я по началу так и сделал, но файл копировался хрен пойми куда.
propeller
16.06.2017
В 10ке все норм. Ставь оригинальный образ, а не сборку. Ну или объяви %USERPROFILE% в системе и перезагрузи комп.
RealVaVa
16.06.2017
Оригинальный OEM образ. Сборками не балуюсь.
Warwar
15.06.2017
есть 2 предположения:
1. не может сделать двойную подстановку в одной команде copy file.txt %desktop-path%
2. не хватает слэша в конце copy file.txt %desktop-path%\

а просто команда "copy file.txt %USERPROFILE%\Desktop" работает?
RealVaVa
15.06.2017
Warwar писал(а)
copy file.txt %USERPROFILE%\Desktop

да, работает и слэш не помогает - сам думал на это.
K0IIIAK
15.06.2017
что я делаю не так?

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" не работает
Warwar
15.06.2017
В батнике получается двойная подстановка, в bash для этого надо сделать eval.
Подозреваю, в винде тоже надо что-то ещё подставить.
RealVaVa
15.06.2017
Гуглю на эту тему - ничего внятного найти не могу.
Вот, например - stackoverflow.com/questions/34103871/batch-dynamic-variable-name-eval-equivalent
Warwar
15.06.2017
Ниже Кошак написал же...
Set desktop-path=%USERPROFILE%\Desktop

не, пардон, я понял... из реестра прилетает с %%
RealVaVa
15.06.2017
K0IIIAK писал(а)
что я делаю не так?

не знаю. Как такой вариант? Положите куда-нибудь не на systemdrive
К сообщению прикреплен файл:
178663682-test.zip   (1 Kb)   Скачать файл
K0IIIAK
15.06.2017
действительно

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:\>
Er.DS
15.06.2017
RealVaVa писал(а)
из текущей для батника папки

А точно идёт попытка скопировать именно из текущей для батника папки? Не запускается ли батник от другой учётки с её переменными окружения? А если прописать полный путь к file.txt?
RealVaVa
15.06.2017
Даже если он и запускается из-под другой учётки, у неё должен быть свой каталог рабочего стола. Так? А тут всё же "Системе не удается найти указанный путь. "
K0IIIAK
15.06.2017
у меня вот так заработало , 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
RealVaVa
15.06.2017
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

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

Ибо вот так-то работает:
SET mytemp=%USERPROFILE%\Desktop
ECHO %mytemp%
COPY file.txt %mytemp%
RealVaVa
15.06.2017
проблема в том, что параметр задаётся выше, и там пробелов нет)) Хотя... он же берётся из реестра и там тож чот не очень прозрачно.
Er.DS
15.06.2017
Ничего не понял. Я говорю, что переменная содержит некорректную строку, полученную криво из реестра.
RealVaVa
15.06.2017
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

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

Спасибо. Сработало.
Warwar
16.06.2017
читд
Er.DS
16.06.2017
Почему в моём примере вызывать ничего не требуется и происходит корректное двойное раскрытие переменной?

SET mytemp=%USERPROFILE%\Desktop
ECHO %mytemp%
COPY file.txt %mytemp%
K0IIIAK
16.06.2017
у тебя раскрытие не двойное, %USERPROFILE% раскрывается на этапе записи в переменную


c:\>SET mytemp=C:\Users\K0IIIAK\Desktop

c:\>ECHO C:\Users\K0IIIAK\Desktop
C:\Users\K0IIIAK\Desktop

c:\>cd C:\Users\K0IIIAK\Desktop
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Последние темы форумов