delete C:\*.* /exclude=zzz.lst ?

Аватара пользователя
Creat0R

Re: delete C:\*.* /exclude=zzz.lst ?

Сообщение Creat0R »

Цитата semiono:



как можно такой код зделать?
delete C:\*.* /exclude=zzz.lst ?




If @OSArch = "x86" Then ...

В справке ведь оно всё написано.
Аватара пользователя
semiono

Re: delete C:\*.* /exclude=zzz.lst ?

Сообщение semiono »

Точно! Всё легко получилось, просто ифов понаставил как есть, я думал сложнее будет!

Кстати в хелпе мало написанно, я бы ещё долго думал, как If @OSArch = "x86" Then составить,

я бы комплексовал бы, как обычно кода боюсь.



Код:

Код: Выделить всё

If @OSArch = "x86" Then
$InstallDir = RegRead("HKLM\Software\Native Instruments\AkoustikPiano","InstallDir")
$file = FileOpen($InstallDir & "\AkoustikPiano.reg", 10)
FileWrite($file, "Windows Registry Editor Version 5.00" & @CRLF & @CRLF)
FileWrite($file, "[HKEY_LOCAL_MACHINE\Software\Native Instruments\AkoustikPiano]" & @CRLF)
FileWrite($file, """SYSTEMID""=" & $sysID & "" & @CRLF & @CRLF)
FileClose($file)
EndIf
If @OSArch = "x64" Then
$InstallDir = RegRead("HKLM\Software\Wow6432Node\Native Instruments\AkoustikPiano","InstallDir")
$file = FileOpen($InstallDir & "\AkoustikPiano.reg", 10)
FileWrite($file, "Windows Registry Editor Version 5.00" & @CRLF & @CRLF)
FileWrite($file, "[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Native Instruments\AkoustikPiano]" & @CRLF)
FileWrite($file, """SYSTEMID""=" & $sysID & "" & @CRLF & @CRLF)
FileClose($file)
EndIf

Жалко что reg.exe export отдельные value не сохраняет в файл, а в InnoSetup даже RegRead не нашлось,

пришлось к AutoIt обращаться, как всегда только это и выручает!
Аватара пользователя
Creat0R

Re: delete C:\*.* /exclude=zzz.lst ?

Сообщение Creat0R »

Цитата semiono:



я бы комплексовал бы, как обычно кода боюсь
delete C:\*.* /exclude=zzz.lst ?




Нечего бояться, без эксперементов трудно (невозможно?) достичь желаемых результатов Изображение



Что касается кода выше, то можно укоротить:





Код:

Код: Выделить всё

$sRegKeyName = ""
Switch @OSArch
    Case "x86"
        $sRegKeyName = "HKLM\Software\Native Instruments\AkoustikPiano"
    Case "x64"
        $sRegKeyName = "HKLM\Software\Wow6432Node\Native Instruments\AkoustikPiano"
EndSwitch
$InstallDir = RegRead($sRegKeyName, "InstallDir")
$sFile_Content = _
    "Windows Registry Editor Version 5.00" & @CRLF & @CRLF & _
    "[" & $sRegKeyName & "]" & @CRLF & _
    '"SYSTEMID"=' & $sysID & @CRLF & @CRLF
$hFileOpen = FileOpen($InstallDir & "\AkoustikPiano.reg", 10)
FileWrite($hFileOpen, $sFile_Content)
FileClose($hFileOpen)
Аватара пользователя
semiono

Re: delete C:\*.* /exclude=zzz.lst ?

Сообщение semiono »

Это очень интересно! Очень хорошо!



; это зачем, пустая переменная?

$sRegKeyName = ""



; а как используется выключатель, ведь далее в коде ни @OSArch ни x86 нигде не встречается!?

; а понял, наверное ядро само уже подставляет всюду переменные когда имеется такой блок: (типа директивы)

Switch @OSArch

Case "x86"

$sRegKeyName = "HKLM\Software\Native Instruments\AkoustikPiano"

Case "x64"

$sRegKeyName = "HKLM\Software\Wow6432Node\Native Instruments\AkoustikPiano"

EndSwitch



$InstallDir = RegRead($sRegKeyName, "InstallDir")



$sFile_Content = _

"Windows Registry Editor Version 5.00" & @CRLF & @CRLF & _

"[" & $sRegKeyName & "]" & @CRLF & _

'"SYSTEMID"=' & $sysID & @CRLF & @CRLF

; я не ошибусь если именно тут < буду наращивать регфайл содержимое ещё?

; ато тестировать сразу сложно под две платформы, вообще мне такой код позарез всегда нужен!





$hFileOpen = FileOpen($InstallDir & "\AkoustikPiano.reg", 10)

FileWrite($hFileOpen, $sFile_Content)

FileClose($hFileOpen)
Аватара пользователя
Creat0R

Re: delete C:\*.* /exclude=zzz.lst ?

Сообщение Creat0R »

Цитата semiono:



это зачем, пустая переменная
delete C:\*.* /exclude=zzz.lst ?




Это объявление переменной.




Цитата:



как используется выключатель, ведь далее в коде ни @OSArch ни x86 нигде не встречается



Switch это как бы If, только тут мы делаем выбор, что совпадает с макросом. См. справку, дольше чем пару секунд, её нужно вызубрить, и потом заглядывать для подтверждения Изображение - Я до сих пор туда обращаюсь за помощью.




Цитата:



я не ошибусь если именно тут < буду наращивать регфайл содержимое ещё?



Нет, там можно добавлять строчки по аналогии первых (через разделитель & _).
Аватара пользователя
semiono

Re: delete C:\*.* /exclude=zzz.lst ?

Сообщение semiono »

Цитата Creat0R:



Нет, там можно добавлять строчки по аналогии первых (через разделитель & _).
delete C:\*.* /exclude=zzz.lst ?




я догадался! Подчёркивание это перенос строки! & _ (в хелпе лично я это так и не нашёл)



Creat0R, мне очень помогло использование Switch для архитектуры.

Я это буду применять относительно всего кода. Но посмотри, всё ли правильно, нельзя ли оптимизировать?

Так как много реестр записей может быть, то получается много свитчеров каждый из которых занимает по шесть строк.

Хотя я лично думаю что это никак не изменишь наверное. Ну тогда и так хорошо.

И ещё, я решил это вначале кода писать, так как это полюбому глобально для всей программы.

Вот пример, всё ли правильно? Или сократить можно?



Код:

Код: Выделить всё

#Include 
#include 
Switch @OSArch
    Case "x86"
        $sRegApps = "HKEY_LOCAL_MACHINE\Software\Native Instruments\AkoustikPiano"
    Case "x64"
        $sRegApps = "HKEY_LOCAL_MACHINE\Software\Wow6432Node\Native Instruments\AkoustikPiano"
EndSwitch
Switch @OSArch
    Case "x86"
        $sRegVSTs = "HKEY_LOCAL_MACHINE\Software\VST"
    Case "x64"
        $sRegVSTs = "HKEY_LOCAL_MACHINE\Software\Wow6432Node\VST"
EndSwitch
RegDelete($sRegApps,"KEY")
RegDelete($sRegApps,"SNO")
RegDelete($sRegApps,"SYSTEMID")
ProgressOn("Running...","","")
ProgressSet(100)
BlockInput(1)
; далее тут работы с окном, в которых тоже используются переменные реестра
; так что тоже удобно $sRegApps, $sRegVSTs по архитектуре передавать.
BlockInput(0)
ProgressOff()
; тут практически твой код, только на два файла уже...
$sDir1 = RegRead($sRegApps, "InstallDir")
$sDir2 = RegRead($sRegVSTs, "VSTPluginsPath") & "\AkoustikPiano"
$sFile_Content = _
    "Windows Registry Editor Version 5.00" & @CRLF & @CRLF & _
    "[" & $sRegApps & "]" & @CRLF & _
	'"SNO"="' & $SNO & '"' & @CRLF & _
	'"SYSTEMID"="' & $sysID & '"' & @CRLF & _
    '"KEY"="' & $KEY & '"' & @CRLF & @CRLF
$hFileOpen = FileOpen($sDir1 & "\AkoustikPiano.reg", 10)
FileWrite($hFileOpen, $sFile_Content)
FileClose($hFileOpen)
$hFileOpen = FileOpen($sDir2 & "\AkoustikPiano.reg", 10)
FileWrite($hFileOpen, $sFile_Content)
FileClose($hFileOpen)

Всё ли хорошо? Чтоб потом не переделывать, ато это как бы будет шаблон на много разных программ.



Есть идея, а нельзя ли свитчеры с описанием реестра x86_x64 вынести в инклюд - внешний скрипт?

Только так чтоб это было универсально, чтоб потом в самом коде можно было какугодно писать без проблем?

Да и сам инклюд чтоб можно было независимо наращивать, ключей добавлять?

Я практически наверное сам уже на это отвечаю, но может быть я не знаю чегото важного тут?
Аватара пользователя
semiono

Re: delete C:\*.* /exclude=zzz.lst ?

Сообщение semiono »

Цитата semiono:



Вот пример, всё ли правильно? Или сократить можно?
delete C:\*.* /exclude=zzz.lst ?




Можно, зачем например там два раза используется Switch @OSArch, в первом сравнение можно назначить нужные переменные:





Код:

Код: Выделить всё

Switch @OSArch
    Case "x86"
        $sRegApps = "HKEY_LOCAL_MACHINE\Software\Native Instruments\AkoustikPiano"
        $sRegVSTs = "HKEY_LOCAL_MACHINE\Software\VST"
    Case "x64"
        $sRegApps = "HKEY_LOCAL_MACHINE\Software\Wow6432Node\Native Instruments\AkoustikPiano"
        $sRegVSTs = "HKEY_LOCAL_MACHINE\Software\Wow6432Node\VST"
EndSwitch

И ещё, зачем длва раза записывать одно и то-же содержимое в файл, когда проще его скопировать:





Код:

Код: Выделить всё

$hFileOpen = FileOpen($sDir1 & "\AkoustikPiano.reg", 10)
FileWrite($hFileOpen, $sFile_Content)
FileClose($hFileOpen)
FileCopy($sDir1 & "\AkoustikPiano.reg", $sDir2 & "\AkoustikPiano.reg", 8+1)


Цитата semiono:



нельзя ли свитчеры с описанием реестра x86_x64 вынести в инклюд - внешний скрипт?
delete C:\*.* /exclude=zzz.lst ?




Не желательно, include поместит всё содержимое выводимого скрипта в начало (там где include вызывается), а присвоение динамических переменных желательно делать "на виду".
Аватара пользователя
Creat0R

Re: delete C:\*.* /exclude=zzz.lst ?

Сообщение Creat0R »

Цитата Creat0R:



Можно, зачем например там два раза используется Switch
delete C:\*.* /exclude=zzz.lst ?




Вот я ступил, действительно просто всё! Меня метки Case отвлекли, я думал их же нельзя сменить,

а сам контент как возможность какраз таки и проморгал.

А с копированием тоже хорошая идея, хотя я и подумаю, но наверное она лучше конечно!


Цитата Creat0R:



присвоение динамических переменных желательно делать "на виду".
delete C:\*.* /exclude=zzz.lst ?




ну код вобщем-то обозримый, хотя с этими сокращениями уже видимо не стоит.
Ответить

Вернуться в «AutoIt»