Оказывается наполовину работает! Вообщем такое срабатывает /val "New Value #1"
Проблемма возникает при перечислении: /val "New Value #1","New Value #2", даже если один из параметров не имеет пробелов.
Причём, точки /val: можно не указывать, как я заметил.
Ну и всякие трансцендентальные типы REG_DWORD_BIG_ENDIAN скрипт не пережёвывает, впрочем это хорошо.
хух! нашёл "недокументированные возможности", можно так вбивать:
/val
"New Value #2,New Value #1
" — это валидно для работы RegSave
* скрипта!
---
(!) есть небольшое различие в hex(7): записи пустых параметров.
regedit.exe "ExcludeFromKnownDlls"=hex(7):00,00
regsave.exe "ExcludeFromKnownDlls"=hex(7):00,00,00,00
--- я добавил вывод в консоль, для приличия
похоже, что логично работает...
Код:
Global $aParms = StringRegexp($CmdLineRaw, '/(\w+)(?:[\s:]+(?:"([^"]+)"|([^\s/"]+)))?', 4)
If @error Then
ConsoleWrite("2001-2005 GmbH, Semiono. Coded by Amel27." & @CRLF & @CRLF)
ConsoleWrite(" //xregs.exe synops: ..." & @CRLF & @CRLF)
ConsoleWrite(@TAB & '{/val: "value1,value2,value3,etc."}|{/val:*}|{/add}...' & @CRLF)
ConsoleWrite(@TAB & '{/key: "[HKCR,HKCU,HKLM,HKU,HKCC]\Subkey"}' & @CRLF)
ConsoleWrite(@TAB & '{/reg: "[Drive:]\PATH\File.reg"}' & @CRLF) ; /out я переделал в $REG
Exit -1 ; Ошибка: не указано ни одного параметра
EndIf
For $aParm In $aParms
If UBound($aParm)=2 Then Assign($aParm[1], True)
If UBound($aParm)>2 Then Assign($aParm[1], $aParm[UBound($aParm)-1])
Next
Global $iMode=8+2
If $add Then $iMode = 1
If $val=="*" Then $val = _RegEnumVals($key)
_RegValSave($reg, $key, $val, $iMode)
If @error = 1 Then
ConsoleWrite(@CRLF & "2001-2005 GmbH, Semiono. Coded by Amel27." & @CRLF)
ConsoleWrite("Failed! ..." & @CRLF)
Exit @error ; ошибки выполнения _RegValSave()
EndIf
If @error = 0 Then
ConsoleWrite(@CRLF & "2001-2005 GmbH, Semiono. Coded by Amel27." & @CRLF)
ConsoleWrite("Success! ..." & @CRLF)
EndIf
----
А почему Func _RegValSave($file, $key, $vals = "", $mode =
42) не даёт юникод файл?
Или это от BitAND() операций ещё зависит в данном скрипте?
----
Я ещё кое что на-бета тестил...
Вот проблемма:
[HKEY_LOCAL_MACHINE\Software\Classes\WinRAR\shell\open\command]
"@"="C:\I\Apps\WinRAR\WinRAR.exe "%1""
Должно быть:
[HKEY_LOCAL_MACHINE\Software\Classes\WinRAR\shell\open\command]
@="C:\\I\\Apps\\WinRAR\\WinRAR.exe \"%1\""
И ещё очень не хватает опции сохранения всех субключей...
Я попытался запустить без /val: свитчера, чтобы сохранить следущее:
xregs.exe /key: "HKLM\Software\Classes\.rar" /reg: "c:\file.reg"
xregs.exe /key: "
HKLM\Software\Classes\WinRAR\DefaultIcon" /reg: "c:\file.reg" /add
xregs.exe /key: "
HKLM\Software\Classes\WinRAR\shell\open\command" /reg: "c:\file.reg" /add
Но они затирают по-моему друг друга. Вообщем что-то там непонятное было...
Мне пришла идея! Может лучше зделать другие разделители для коммандной строки?
Чтобы вообще это не противоречило скрипту, и чтоб не надо было экранировать.
Ещё одна косметичиская фишка если не трудно, надо чтобы при /add не добавлялись @CRLF & @CLRF
перед каждым субкейем, но это я сам виноват, я к концу регфайла же дописал & @CLRF,
правда в конце файла это уместно.