Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Выполнение комманд из реестра?

Ответить
Настройки темы
CMD/BAT - [решено] Выполнение комманд из реестра?

Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Пример.
Код: Выделить весь код
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\RunOnce"; ValueType: string; ValueName: "reg.exe"; ValueData: "cmd.exe /c reg copy HKLM\Software\$$ HKCU /s /f &xcopy {win}\$\AppData {reg:HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList,ProfilesDirectory}\{username}\AppData /eciqhry &xcopy {win}\$\ProgramData {commonappdata} /eciqhry"; Flags: noerror; Permissions: everyone-full
Вопрос в следущем, раньше у меня была строка "RunOnce" = "reg copy HKLM\Software\$$ HKCU" и это работало, но потом я добавил &xcopy и что-то не стало выполняться.
Вобщем я пришёл к выводу, что лучше запускать всю строку под управлением cmd.exe /c Однако, хотелось бы знать как правильно и почему,
мне кажется этот вопрос касается ShellExecute, в том плане, что в cmd/bat возможно другие правила,
а в работе в открытом cmd.exe другие правила, поэтому хочется выяснить, чтобы не делать ошибок.

-------
Полезное сообщение


Отправлено: 19:18, 15-02-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата semiono:
Пример. »
Откуда пример? InnoSetup?!

Переведите на русский.

Отправлено: 19:33, 15-02-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Цитата Iska:
Откуда пример? InnoSetup?! »
InnoSetup, пример мой,
Цитата Iska:
Переведите на русский. »
там ведь всё понятно..

[HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce]
"reg.exe"="cmd.exe /c reg copy HKLM\Software\$$ HKCU /s /f &xcopy D:\App C:\Users\Administrator\AppData /eciqhry &xcopy D:\Pro C:\ProgramData /eciqhry

Меня волнует только, почему xcopy без cmd.exe /c не работает из "пуск выполнить", что то же самое из RunOnce насколько я понимаю.
Хотя понятно, на то он и команд процессор, чтобы командовать



Может быть дело даже не в xcopy, а в связке &амперсендов которым нужен cmd.exe?
Вобщем ликбез)

-------
Полезное сообщение


Последний раз редактировалось semiono, 15-02-2014 в 21:36.


Отправлено: 21:29, 15-02-2014 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Что такое «$$», «$»?

Цитата semiono:
но потом я добавил &xcopy и что-то не стало выполняться. »
Естественно. Поскольку «&» — прерогатива исключительно командного процессора.

Цитата semiono:
мне кажется этот вопрос касается ShellExecute, в том плане, что в cmd/bat возможно другие правила, »
«ShellExecute» тут совершенно не при чём.

В общем и целом: то, что есть команда, должно быть заключено в кавычки:
Код: Выделить весь код
{%COMSPEC} /c"reg copy HKLM\Software\$$ HKCU /s /f &xcopy {win}\$\AppData {reg:HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList,ProfilesDirectory}\{username}\AppData /eciqhry &xcopy {win}\$\ProgramData {commonappdata} /eciqhry"
Заработает ли это — смотрите, проверяйте сами.

Цитата cmd.exe /?:
Код: Выделить весь код
Чтобы указать в одной строке несколько команд, следует разделить их 
символами '&&' и заключить в кавычки. Кроме того, из соображений 
совместимости, /X означает то же, что и /E:ON, /Y то же, что и /E:OFF 
и /R то же, что и /C.  Все прочие ключи командной строки игнорируются.

Если указаны ключи /C или /K, то остальная часть командной строки после
такого ключа обрабатывается как командная строка, а обработка символов 
кавычек (") ведется по следующим правилам:

    1.  Если выполняются все перечисленные ниже условия, то символы
        кавычек в командной строке сохраняются:

        - ключ /S отсутствует
        - есть ровно два символа кавычек
        - между ними нет других специальных символов, как то: &<>()@^|
        - между ними имеются один или несколько пробелов
        - строка, заключенная в кавычки, является именем исполнимого 
          файла.

    2.  В противном случае, проверяется первый символ, и если он является
        символом кавычек, то он удаляется, также удаляется последний
        символ кавычек в командной строке, а весь текст после этого 
        последнего символа кавычек сохраняется.

Отправлено: 21:43, 15-02-2014 | #4


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Цитата Iska:
Естественно. Поскольку «&» — прерогатива исключительно командного процессора. »
Теперь понятно.
Цитата Iska:
Что такое «$$», «$»? »
Это я так папки называю.
Цитата Iska:
«ShellExecute» тут совершенно не при чём. »
Здесь я имею ввиду, что есть разница выполнение команд в cmd или из проводника, но из вопроса об амперсенд стало понятно почему)
Цитата Iska:
{%COMSPEC} /c »
Интересно. Обычно я избегаю лишний раз квотировать, хотя себе же хуже)

Всётаки у меня не получилось! Либо xcopy не копирует скрытые файлы, либо тут дело в другом, может быть что-то ещё.
Вот такой набор ключей использовал /eciqhry, хотя /s - системные я позабыл, может быть в этом причина.
Вобщем я хотел скопировать в папки Administrator\AppData\Local и Administrator\AppData\Roaming свои папки с контентом
из раздела реестра RunOnce через cmd /c, очевидно что не скопировались папки в скрытые директории, другие, например,
скопировались. Видимо надо было /s добавить.

Профиль Administrator со всеми нужными подпапками ведь должен существовать когда RunOnce выполняется..
Вход в систему тоже под Администратором разумеется, поэтому тут права роль не играют.

-------
Полезное сообщение


Отправлено: 16:01, 16-02-2014 | #5


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата semiono:
Цитата Iska:
Что такое «$$», «$»? »
Это я так папки называю. »
Ясно.

Цитата semiono:
Здесь я имею ввиду, что есть разница выполнение команд в cmd или из проводника, но из вопроса об амперсенд стало понятно почему) »
Говоря о «ShellExecute» обычно подразумевается запуск ассоциированного с типом файла приложения.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:05, 16-02-2014 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Выполнение комманд из реестра?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Последовательное выполнение команд из txt rvm.luma Скриптовые языки администрирования Windows 5 06-09-2013 14:21
PowerShell - Выполнение вложенных скриптов PS из файла rudimko Скриптовые языки администрирования Windows 4 05-11-2012 14:01
CMD/BAT - выполнение команд из списка в txt файле systemroot Скриптовые языки администрирования Windows 2 12-02-2011 17:49
Bash (Удалённый вход по ssh и выполнение комманд) bombording Программирование в *nix 10 05-11-2009 16:33
Разное - [решено] Вызовы комманд из бинарей? semiono Microsoft Windows 2000/XP 3 07-11-2008 21:54




 
Переход