[Quote]

    puhpol
  • 2
  • Longevity: 5 years 10 months
  • Posts: 935
  • REPUTATION:60

    [+] [-]
Приветствую господа! aa
Предлагаю в данной теме выкладывать примеры работы скриптов на PECMD.
Добавлено через 2 минуты 54 секунды:
Сам и начну.
Скрипт для организации удобной работой с носителем. Сделано для себя любимого, здесь как пример.
.

Сам скрипт

CALC #XEnvi=0
ENVI pb=CALC Pbar1=%Pbar1%+%b%
ENVI pb1=ENVI @Pbar1=%Pbar1%
ENVI p=CALC n=%n%+1
CALL @Windows1
_SUB Windows1,W400H240,Установка программ,,
ENVI @this.Font=14:Tahoma
LABE Label1,L10T10W380H20,Что будем делать?,,0xaaaaaa,16
ITEM But1,L20T50W350H25,Установить Минимальный пакет программ,CALL W2
ITEM But2,L20T95W150H25,Запуск MInstAll,TEAM EXEC %CurDir%\MInstAll\MInst.exe|KILL \%Windows1%
ITEM But3,L220T95W150H25,Активаторы,CALL W3
ITEM But4,L20T140W350H25,Office 2013-2019 C2R Install,TEAM EXEC %CurDir%\MInstAll\software\Activation\Office2013_2019\OInstall.exe|KILL \%Windows1%
_END
_SUB W3,W400H240,Активаторы,,
ENVI @this.Font=14:Tahoma
ITEM Bu1,L20T50W350H25,KMSAuto++ Portable v1.5.5,TEAM EXEC %CurDir%\MInstAll\software\Activation\KMSAuto++\KMSAuto++.exe|KILL \%W3%
ITEM Bu2,L20T95W350H25,Windows Loader 2.2.2 by Daz,TEAM EXEC %CurDir%\MInstAll\software\Activation\Loader\Windows Loader.exe|KILL \%W3%
//ITEM Bu3,L20T140W350H25,Office 2013-2019 C2R Install,TEAM EXEC %CurDir%\MInstAll\software\Activation\Office2013_2019\OInstall.exe|KILL \%W3%
_END
_SUB W2,W400H280,Мини Инсталл,,
ENVI @this.Font=12:Tahoma
LABE Label,L10T10W380H20,Выберите программы для установки ,,0xaaaaaa,16
// рисуем чекбоксы
CHEK Chk1,L15T40W150H20,7-Zip 19.00,,1
CHEK Chk2,L15T60W150H20,SumatraPDF 3.1.2,,1
CHEK Chk3,L15T80W150H20,UltraISO 9.7.2.3561,,1
CHEK Chk4,L15T100W150H20,WinRAR 5.71,,1
CHEK Chk5,L15T120W150H20,RuntimePack Lite,,1
//CHEK Chk6,L15T140W150H20,RuntimePack Lite,,0
CHEK Chk7,L220T40W250H20,Notepad++,,1
CHEK Chk8,L220T60W250H20,VLC,,1
CHEK Chk9,L220T80W250H20,XnShell,,1
CHEK Chk10,L220T100W250H20,Office2003micro,,1
CHEK Chk11,L220T120W250H20,DirectX 9.0c,,1
//CHEK Chk12,L220T140W250H20,DirectX 9.0c,,0
PBAR PBAR1,L15T180W365H20,,
ENVI @Pbar1=-1 //Задаём начальное значение прогрессбара, при -1 он невидим
ITEM Button1,L15T215W100H24,Снять выбор,CALL Slct
ITEM Button2,L285T215W100H24,Установить,CALL puh
LABE h1,L130T200W120H24, ,,0x0000FF,14
_END
_SUB Slct
FORX* 1 2 3 4 5 6 7 8 9 10 11 12,TEnvi,ENVI @Chk%TEnvi%.Check=%XEnvi%
CALC XEnvi=lnot(%XEnvi%)
FIND $%XEnvi%=0,ENVI @Button1=Снять выбор!ENVI @Button1=Выбрать всё
_END
_SUB puh
MESS Установить выбранные приложения?@#YN
FIND $%YESNO%=YES,CALL st
FIND $%YESNO%=NO,EXIT
_END
_SUB st
ENVI n=0
IFEX $%Chk1.Check%=1,%p%
IFEX $%Chk2.Check%=1,%p%
IFEX $%Chk3.Check%=1,%p%
IFEX $%Chk4.Check%=1,%p%
IFEX $%Chk5.Check%=1,%p%
IFEX $%Chk6.Check%=1,%p%
IFEX $%Chk7.Check%=1,%p%
IFEX $%Chk8.Check%=1,%p%
IFEX $%Chk9.Check%=1,%p%
IFEX $%Chk10.Check%=1,%p%
IFEX $%Chk11.Check%=1,%p%
IFEX $%Chk12.Check%=1,%p%
CALC b=100/%n%
ENVI @Pbar1=0
CALL inst
_END
_SUB inst
ENVI @h1=Установка .....
IFEX $%Chk1.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\Archivers\7-Zip-19.00.exe" /ais|%pb%|%pb1%
IFEX $%Chk2.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\Office\SumatraPDF-3.1.2.exe" /ais|%pb%|%pb1%
IFEX $%Chk3.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\ISO\UltraISO-9.7.2.3561.exe" /VERYSILENT|%pb%|%pb1%
IFEX $%Chk4.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\Archivers\WinRAR-5.71.exe" /ais|%pb%|%pb1%
IFEX $%Chk5.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\System\RuntimePack_Lite-17.3.14.exe" /y /gm2 /fm0|%pb%|%pb1%
//IFEX $%Chk6.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\prog\"|%pb%|%pb1%
IFEX $%Chk7.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\Text\Notepad++7.8.1.exe" /ais|%pb%|%pb1%
IFEX $%Chk8.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\Players\VLC-3.0.8.exe" /ais|%pb%|%pb1%
IFEX $%Chk9.Check%=1,TEAM EXEC =*"%CurDir%\MInstAll\software\Graphics\XnShell.cmd"|%pb%|%pb1%
IFEX $%Chk10.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\Office_micro\Office2003micro.exe" /y| EXEC ="%CurDir%\MInstAll\Office_micro\Office2007support.exe"|%pb%|%pb1%
IFEX $%Chk11.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\System\DirectX.exe" /S|%pb%|%pb1%
//IFEX $%Chk12.Check%=1,TEAM EXEC ="%CurDir%\MInstAll\software\prog\"|%pb%|%pb1%
ENVI @h1=ГОТОВО!
TIPS Выбранные приложения установленны!!!, \n,5000,1,
KILL \%W2%
_END

[Quote]

    dimo70
  • 17296
  • Longevity: 2 years 9 months
  • Posts: 1509
  • REPUTATION:19

    [+] [-]
  • Location: BG
puhpol, спасибо большое за скрипт. Очень помог мне сделать мою утилитку Defender Killer.

скрипт

CALC #XEnvi=0
ENVI pb=CALC Pbar1=%Pbar1%+%b%
ENVI pb1=ENVI @Pbar1=%Pbar1%
ENVI p=CALC n=%n%+1
CALL @Windows1
_SUB Windows1,W250H130,Defender Killer,,
ENVI @this.Font=16:Tahoma
LABE Label1,L0T10W250H20,Killing Windows Defender,,0xaaaaaa,16
ITEM But1,L22T45W200H30,Kill Defender,EXEC %CurDir%\DefenderKiller\Defenfer_Removal.cmd
_END
Есть только один вопрос пока: есть вариант сделать тихую установку с ключа?

[Quote]

    puhpol
  • 2
  • Longevity: 5 years 10 months
  • Posts: 935
  • REPUTATION:60

    [+] [-]
dimo70, Приветствую! aa
Так вот же:
EXEC ="%CurDir%\MInstAll\software\System\RuntimePack_Lite-17.3.14.exe" /y /gm2 /fm0

[Quote]

    loban_ser
  • 17796
  • Longevity: 2 years 7 months
  • Posts: 444
  • REPUTATION:10

    [+] [-]
75419EXEC %CurDir%\DefenderKiller\Defenfer_Removal.cmd
EXEC !%CurDir%\DefenderKiller\Defenfer_Removal.cmd - скрыть
EXEC =%CurDir%\DefenderKiller\Defenfer_Removal.cmd - с ожиданием
вроде так

[Quote]

    sergeysvirid
  • 104
  • Longevity: 5 years 9 months
  • Posts: 1931
  • REPUTATION:127

    [+] [-]
  • Location: 65 регион (GMT+11)
loban_ser,
dimo70,
Может всё таки как то так?:
CALL @Windows1
_SUB Windows1,W250H130,Defender Killer,,
ENVI @this.Font=16:Tahoma
LABE Label1,L0T10W250H20,Killing Windows Defender,,0xaaaaaa,16
ITEM But1,L22T45W200H30,Kill Defender,TEAM EXEC =!%CurDir%\DefenderKiller\Defenfer_Removal.cmd|KILL \%Windows1%
_END

[Quote]

    dimo70
  • 17296
  • Longevity: 2 years 9 months
  • Posts: 1509
  • REPUTATION:19

    [+] [-]
  • Location: BG
75445
CALL @Windows1
_SUB Windows1,W250H130,Defender Killer,,
ENVI @this.Font=16:Tahoma
LABE Label1,L0T10W250H20,Killing Windows Defender,,0xaaaaaa,16
ITEM But1,L22T45W200H30,Kill Defender,TEAM EXEC =!%CurDir%\DefenderKiller\Defenfer_Removal.cmd|KILL \%Windows1%
_END
Пробовал, так проще всего и проблем нет. Обновлю.

[Quote]

    conty9
  • 100
  • Longevity: 5 years 9 months
  • Posts: 1272
  • REPUTATION:127

    [+] [-]
  • Location: Західна Україна
Cкопировал из темы PECMD:

Скрипт для создания списка исключительно 'работающих' буковок дисков

TEAM FDRV NEnvi=*:|ENVI AllDrv=
FORX * %NEnvi%,DEnvi,
{* FDRV *vol ,TEnvi=%DEnvi%
FIND $%TEnvi%=,EXIT -!ENVI AllDrv=%AllDrv% %DEnvi%
}
MESS %AllDrv%

Скрипт работает так: вначале в NEnvi помещается список всех имеющихся буковок дисков (FDRV NEnvi=*:). Потом по этому списку проверяется наличие файловой системы (FDRV *vol ...). При её наличии буковка добавляется в список %AllDrv%. После отработки в %AllDrv% находится перечень всех "рабочих" буковок, который можно использовать, например, для операции поиска на диске (без опасности обращения к поврежденному диску или диску-пустышке). Этот список выводится на экран MESS %AllDrv%.
Как можно использовать этот скрипт? Например, нам нужно найти 2k10\Programs-2k10\Win2k78.bat. Тогда после скрипта организуем поиск и запуск:
FORX * %AllDrv%,DEnvi,IFEX %DEnvi%\2k10\Programs-2k10\Win2k78.bat,TEAM EXEC %DEnvi%\2k10\Programs-2k10\Win2k78.bat|EXIT -
Эта строчка перебирает все буковки из списка в %AllDrv%. Если на конкретном диске найден Win2k78.bat, тогда запуск бантика и выход из перебора буковок.

Получить информацию о файле (разрядность х32/х64, версия файла, время, атрибуты)

ENVI XFile=%Path%\MyFile.exe
TEAM GETF %XFile%,0x3C#2,TEnvi|MSTR TEnvi,DEnvi=<1><2>%TEnvi%|CALC -base=16 DEnvi=%DEnvi%*256+%TEnvi%+0x19|GETF %XFile%,%DEnvi%#1,TEnvi|FIND $%TEnvi%=0x02,CALC #Razr=64!CALC #Razr=32
MESS %XFile% - разрядность х%Razr%
SITE ?TEnvi=FVER,%XFile%
MESS %XFile% - версия %TEnvi%
SITE ?NEnvi,TEnvi,DEnvi=FTIME,%XFile%
MESS %XFile% - время создания файла %NEnvi%, время записи файла %TEnvi%, время последнего доступа %DEnvi%
SIZE TEnvi=%XFile%
MESS %XFile% - размер файла %TEnvi% байт
SITE ?A,H,R,S=FATTR,%XFile%
MESS %XFile% - атрибуты файла A=%A% H=%H% R=%R% S=%S%

Небольшой пример, какую информацию о накопителе можно получить с помощью команды PART (в переменной SelDsk указываем букву диска)

ENVI SelDsk=C:
PART -hextp -phy list drv %SelDsk%,TEnvi
MSTR DiskN=<9>%TEnvi%
MESS PartID, Type, BootMark, BaseOffset, Size, HideSectorNum, End, DrvLetter,DiskID\n%TEnvi%
PART -devid list disk %DiskN%,TEnvi
MESS DiskID, Size, CylinNum, HeadNum, SetorNum, SectorSize, MediaType, Sign(Hex), BusType, PartType, RemvFixDisk.\n%TENVI%
FORM TEnvi=%SelDsk%
MESS Type Disk (Fixed HDD/USB Drive/USB Flash)\n%TEnvi%
EXIT

Получаем в текст .\HDD_data.txt инфу о накопителях, с комментариями что и как

```````Для облегчения понимания комментов убрал TEAM (это команда, позволяющая размещать несколько команд в одну строчку, разделяя их символом "|"). Применение TEAM позволяет уменьшить кол-во строчек за счет увеличения их длины
`====================================================
ENVI^ EnviMode=1 `определяем работу с локальными переменными
SET$ &NL=0d 0a `присваиваем &NL код перевода строки
FDRV &Drvs=*: `получаем в переменную &Drvs список всех букв дисков в системе (C: D: E: ...)
FORX * %&Drvs%,&D, `начинаем перебор буковок, обрабатываемая буква в переменной &D
{* PART list drv %&D%,&&V `получаем в переменную &&V инфу о смонтированном на эту букву накопителе, в одну строчку: PartID, Type, BootMark, BaseOffset, Size, HideSectorNum, End, DrvLetter, HD number | выглядит примерно так: 3 12 1 474384798720 25720450560 926532810 500105249280 D: 1
MSTR &&hd=<9>%&V% `из всей полученной инфы используем только номер накопителя, 9-е значение |в примере - это 1 (hd1)
^SET &Drv[%&hd%]=%%&Drv[%&hd%]%%%&D% `присваиваем переменной Drv [с привязкой к номеру текущего накопителя hd0] используемую букву
} `повторяем для следующей буквы диска, в результате получим привязку всех буковок к номеру накопителя, например, &Drv0=C:F:G:
PART list disk,&&AllDsk `получаем в переменную &&AllDsk инфу о всех накопителях (примерно так будет 0 1 2 3 4, если в системе 5 накопителей)
ENVI &&FindLIST= `очищаем переменную &&FindLIST
SET &D1= `очищаем переменную &D1
FORX * %&AllDsk%,&Find, `начинаем перебор списка накопителей %&AllDsk%, текущее значение в переменной &Find
{* PART -devid list disk %&Find%,&DskID `получаем в переменную &DskID инфу о накопителе с номером %&Find%, в одну строчку: DiskID, Size, CylinNum, HeadNum, SetorNum, SectorSize, MediaType, Sign(Hex), BusType, PartType, RemvFixDisk, DiskInfo | выглядит примерно так: 0 500107862016 60801 255 63 512 12 CE3BDCAA 3 MBR F IDE\DISKST500DM002-1BC142_______________________JC4B____\5&1D4241CA&0&0.0.0
MSTR &&hd,&&SZ,&&Bus=<1><2><9>%&DskID% `извлекаем 1-е, второе и девятое слова из инфы, это будет соответственно номер харда, размер и шина
SED &DskID=1,DISK\&VEN_, ,%&DskID% `заменяем первую найденную комбинацию "DISK\&VEN_" на " " (пробел), чистим "мусор" с головы
SED &DskID=1,IDE\\DISK,1 ,%&DskID% `заменяем первую найденную комбинацию "IDE\\DISK" на " "
SED &DskID=1,\&PROD_,_,%&DskID% `заменяем первую найденную комбинацию "\&PROD_" на "_"
MSTR &DskID=<-1>%&DskID% `присваиваем переменной &DskID только последнее слово (отсекаем мусор спереди)
SED &DskID=1,\&REV, ,%&DskID% `заменяем первую найденную комбинацию "\&REV" на " " (пробел), чистим "мусор" с хвоста
SED &DskID=1,\\, ,%&DskID% `заменяем первую найденную комбинацию "\\" на " "
SED &DskID=1,___, ,%&DskID% `заменяем первую найденную комбинацию "___" на " "
MSTR &DskID=<1>%&DskID% `присваиваем переменной &DskID только первое слово (отсекаем мусор сзади)
SED &DskID=8,_, ,%&DskID% `заменяем все "_" на пробелы (для красоты)
FIND $%&DskID%=,SET &DskID=- `если инфа о накопителе не получена, тогда прочерк "-"
IFEX #%Bus%=2, SET Bus=(ATAPI) `анализ шины >> ATAPI
IFEX #%Bus%=3, SET Bus=(ATA) `анализ шины >> ATA
IFEX #%Bus%=7, `анализ шины - USB, но пока не известно - Flash или HDD
{
SET Bus=(USB_HDD) `анонсом присвоим шине значение USB-HDD
^SET &TEnvi=%%&Drv[%hd%]%% `получаем буквы дисков для этого накопителя
FORM &TEnvi=%&TEnvi% `получаем в TEnvi тип устройства
FIND $%&TEnvi%=DRIVE_USBFLASH,SET Bus=(USB_Flash) `если устройство USB_Flash, тогда обзываем его флешкой ))
}
IFEX #%Bus%=11, SET Bus=(SATA) `анализ шины >> SATA
IFEX #%&SZ%>2G, @TEAM CALC &SZ=%&SZ%/1G#1|SET SZ=%&SZ%G! IFEX #%&SZ%>2M, @TEAM CALC &SZ=%&SZ%/1M#1| SET SZ=%&SZ%M `Пересчет байтов в кило/мега/гигабайты. #1 задаёт точность отображения результата (один знак после запятой)
^SET &FindLIST=%&FindLIST%%&NL%%&Find%,%&Bus%,%&SZ%,%&DskID%,%%&Drv[%hd%]%% `после перевода строки (код в %&NL%) добавляем строчку с данными харда в общий списочек &FindLIST, данные: номер накопителя, шина, размер, название, буквы смонтированных разделов
}
FILE .\HDD_data.txt `удаляем файл .\HDD_data.txt `удаляем файл .\HDD_data.txt (если имеется)
WRIT .\HDD_data.txt,$*,%&FindLIST% `записываем в файл .\HDD_data.txt наш список

Ещё немного обновил скрипт создания списка разделов, теперь имя накопителей как в диспетчере устройств + отображает невидимые разделы флешки

TEAM ENVI HdData=|SET$ &NL=0d 0a|PART list disk,AllDrv
FORX* %AllDrv%,CurDrv,
{* TEAM PART -devid list disk %CurDrv%,DskNam|MSTR HdNum,HdSize,HdBus=<1><2><9>%DskNam%
TEAM REGI $HKLM\SYSTEM\CurrentControlSet\Services\Disk\Enum\%CurDrv%,DskNam
TEAM SED *ni DskNam=1,Disk\&Ven_\&Prod_, ,%DskNam%|SED *ni DskNam=1,Disk\&Ven_, ,%DskNam%
TEAM SED *ni DskNam=1,\\DISK, ,%DskNam%|MSTR DskNam=<-1>%DskNam%|SED *ni DskNam=1,&Rev_, ,%DskNam%
TEAM SED *ni DskNam=1,\&Prod_,_,%DskNam%|SED DskNam=1,___, ,%DskNam%
TEAM SED DskNam=1,\\, ,%DskNam%|MSTR DskNam=<1>%DskNam%|SED DskNam=6,_, ,%DskNam%
FIND $%DskNam%=, SET DskNam=Unrecognized Drive
IFEX #%HdSize%>2G, @TEAM CALC HdSize=%HdSize%/1G#1|ENVI HdSize=%HdSize%G!IFEX #%HdSize%>2M,@TEAM CALC HdSize=%HdSize%/1M#1|ENVI HdSize=%HdSize%M
IFEX #%HdBus%=2,ENVI HdBus=(ATAPI)!IFEX #%HdBus%=3,ENVI HdBus=(ATA)!IFEX #%HdBus%=11,ENVI HdBus=(SATA)
IFEX #%HdBus%=7, TEAM ENVI HdBus=(USB_HDD)|DISK TEnvi,%CurDrv%,1|FORM TEnvi=%TEnvi%|FIND $%TEnvi%=DRIVE_USBFLASH,ENVI HdBus=(USB_Flash)
ENVI HdData=%HdData%%&NL%HD%HdNum%,%HdBus%,%HdSize%,%DskNam%
PART list part %CurDrv%,AllPrt
FORX* %AllPrt%,CurPrt,
{* TEAM SED TEnvi=1,=,1,%CurPrt%|IFEX $%Tenvi%<1,EXIT -
TEAM PART list part %CurDrv%#%CurPrt%,TEnvi|SED CurPrt=1,=,,%CurPrt%
TEAM MSTR PtSize,PtLet=<5><8>%TEnvi%|FIND $%PtLet%=,ENVI PtLet=*
ENVI HdData=%HdData%|%CurPrt%,%PtLet%,%PtSize%
}}
FILE .\HDD_data.txt
WRIT .\HDD_data.txt,$*,%HDdata%
`MESS %HDdata%
EXIT

Обмен двух разделов на двухраздельной флешке (меняем местами видимый и невидимый разделы местами)

ENVI DiskN=6 //В переменной DiskN указываем номер накопителя
PART -phy -super -force -up -hup -swap:2 %DiskN%#1

Скрипт для использования Primo RAM disk под х86 с комментариями

REGI #HKLM\system\ControlSet001\Services\FancyRd\Parameters\EnableIM=0 //Предварительно запрещаем использование невидимой памяти
IFEX MEM=?,MemA //Получаем размер видимой памяти
TEAM EXEC* TEnvi=!cpu64.exe Y|LPOS TEnvi=CPU is 64,1,%TEnvi% //Запускаем утилиту cpu64 для проверки поддержки системой х64 адресации, проверям наличие в выхлопе "CPU is 64"
FIND MEM>2560,IFEX $%TEnvi%=5,REGI #HKLM\system\ControlSet001\Services\FancyRd\Parameters\EnableIM=1 //Если доступной памяти больше 2560Мб и при этом есть поддержка х64 адресации, тогда разрешаем использование невидимой х86 памяти
TEAM EXEC =!frsetup.exe -i1 "X:\Windows\System32\drivers\\"|WAIT 200|EXEC =!frsetup.exe //устанавливаем драйвер при помощи штатного инсталятора Primo frsetup.exe, драйвера fancyrd.* заранее положены в каталог System32\drivers
FORX * 1 2 3 4 5 6 7 8,,TEAM EXEC* MemH=!rxprd.exe mem|FIND $%MemH%=,WAIT 300!EXIT FORX //Пробуем получить информацию о невидимой памяти средствами rxprd.exe, если не получается - ждём 300мс и повторяем до 8 раз
TEAM SED MemH=0,/, ,%MemH%|TEAM MSTR MemH=<7> %MemH%|CALC MemH=%MemH% //Получаем размер невидимой памяти из выхлопа rxprd.exe mem
IFEX $%MemH%<%MemA%,CALC MemA=%MemA%-%MemH%!CALC MemA=128 //Сравниваем количество невидимой и видимой памяти
TEAM ENVI TEnvi=ntfs|CALC #DSize=(%MemA%-128)*6/10+%MemH% //Выбираем файловую систему ntfs и рассчитываем размер РАМ-диска.
IFEX $%DSize%<256,TEAM ENVI TEnvi=fat|CALC DSize=4|PATH X:\Temp //Если рассчитанный размер меньше 256Мб, тогда выбираем файловую систему fat и размер 4Мб (только для монтирования WIM-ов), создаём каталог Temp на Х:\
EXEC =!rxprd.exe add -n %DSize% -t dio -d B -v -i -dmm=COMPACT -f %TEnvi% -c 4KB -l RAMDisk -X -N -T -s //Создаём РАМ-диск, форматируем его
FORX * 1 2 3 4 5 6 7 8,,IFEX B:\,EXIT FORX!WAIT 200 //Ожидаем окончание создания и форматирования.
IFEX X:\TEMP,TEAM ENVI PT=X:\TEMP|FILE --force B:\Temp!TEAM ENVI PT=B:\TEMP|PATH %PT% //Если есть X:\Temp (у нас слишком мало памяти и РАМ-диск 4Мб), тогда назначаем именно X:\Temp в качестве %Temp%
TEAM EXEC =!setenv.exe -m Temp %PT%|EXEC =!setenv.exe -m Tmp %PT% //На всякий случай всем запущенным процессам также указываются выбранный %Temp% и %Tmp%
TEAM REGI HKCU\Environment\TEMP=%PT%|REGI HKCU\Environment\TMP=%PT%
REGI HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\TEMP=%PT%
REGI HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\TMP=%PT% //Прописка %TEMP% и %TMP% в реестре
TEAM ENVI $TEMP=%PT%|ENVI $TMP=%PT%|ENVI //Указание переменных %TEMP% и %TMP% как системных
------------------------------------------------------------------------------------------------------------
*** Замечания.
1. Использование невидимой памяти на системах без поддержки х64 адресации - это 100% BSOD.
2. Драйвера Primo RAM disk, в принципе, можно и в систему интегрировать. Но обязательно дефолтное значение EnableIM=0
3. При небольшом количестве памяти лучше в качестве %TEMP% использовать системный диск Х:\, это позволяет эффективнее использовать память, что и отображено в скрипте. Если памяти мало, тогда РАМ-диск создаётся только под монтирование WIM-набора программ.
4. Если скрипт запущен командой MAIN и PECMD используется в качестве главной оболочки, тогда назначение %TEMP% и %TMP% с помощью setenv.exe, как и прописка в реестре, необязательны. Поскольку в таком случае всё, что запущено после выполнения скрипта, будет запущено из PECMD и унаследует переменные сессии PECMD.

Демонстрационный скрипт: меню в трее

CALL @WIN1 //Запуск меню
_SUB WIN1,L-10T-10W1H1,My tray menu,,#2,- //Создаем в трее меню с именем "My tray menu" и иконкой #2
ENVI &WINID1=%__WinID% //Присваиваем переменной &WINID1 идентификатор нашего меню
MENU Menu2,Create LNK (devmgmt),CALL CrLnk //Создаем пункт меню "Создать ярлык"
MENU - //Второй пункт меню (разделитель)
MENU ,Load data from LNK (devmgmt),CALL LdLnk //Пункт меню "Прочитать данные из ярлыка"
MENU - //Ещё раз разделитель
MENU Menu1,Exit, KILL @@%WINID1% //Последний пункт меню, выход из меню
_END
_SUB CrLnk
LINK !%Desktop%\Device Manager (test),mmc.exe,devmgmt.msc,explorer.exe#4 //Создание ярлычка "Device Manager" на рабочем столе с иконкой 4 из explorer.exe
_END
_SUB LdLnk
LINK ? %Desktop%\Device Manager (test),DestPath,ExecParam,IconPath#IconIdx,Rem,StartPos,HK,DspMark //Получаем в переменные все данные из ярлычка
MESS DestPath=%DestPath%\nExecParam=%ExecParam%\nIconPath=%IconPath%\nIconIdx=%IconIdx%\nRem=%Rem%\nStartPos=%StartPos%\nHK=%HK%\nDspMark=%DspMark% //Вывод полученных данных
_END
------------------------------------------------------------------------------

Скрипт для создания ярлычков для файлов с несколькими путями для обработки, разделитель #

ENVI ScanDir=XMPE\Programs#2k10\Programs-2k10#_WIN\Utilites //Указываем пути, разделителем служит символ "#" (в пути его быть не должно), поддерживаются пути с пробелами
ENVI ScanDpt=3
ENVI ScanTyp=exe cmd bat
ENVI PathLnk=B:\lnk
//////////////////////////////////////////////////////////////
IFEX %PathLnk%,!PATH %PathLnk%
CALC #QEnvi=1 //Начнём с первого пути
LOOP #%QEnvi%=%QEnvi%, //Вечный цикл ))
{* MSTR -delims:# SEnvi=<%QEnvi%>%ScanDir% //Организуем перебор вариантов пути с разделителем "#"
FIND $%SEnvi%=,EXIT LOOP!CALC #QEnvi=%QEnvi%+1 //Если пути закончились, выход! А иначе - следующий путь
FORX @\%SEnvi%,TEnvi,0,
{* FORX* %ScanTyp%,DEnvi,
{* ENVI SCAN=FORX /S:%ScanDpt% %TEnvi%\*.%DEnvi%
%SCAN%,XEnvi,0,TEAM FNAM NEnvi=%XEnvi%|LINK %PathLNK%\%NEnvi%,%XEnvi%
}}}
-----------------------------------------------------------------------------------------
Количество путей и количество расширений не ограничено. Как, при желании, и глубина сканирования. Главное - не перестараться, чтобы не было "всё небо в попугаях" (рабочий стол).

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

ENVI ScanDir=XMPE\Programs 2k10\Programs-2k10 _WIN\Utilites //Указываем пути, разделителем служит пробел, поэтому не поддерживаются пути с пробелами
ENVI ScanDpt=3
ENVI ScanTyp=exe cmd bat
ENVI PathLnk=B:\lnk
//////////////////////////////////////////////////////////////
IFEX %PathLnk%,!PATH %PathLnk%
CALC #QEnvi=1
LOOP #%QEnvi%=%QEnvi%,
{* MSTR SEnvi=<%QEnvi%>%ScanDir%
FIND $%SEnvi%=,EXIT LOOP!CALC #QEnvi=%QEnvi%+1
FORX @\%SEnvi%,TEnvi,0,
{* FORX* %ScanTyp%,DEnvi,
{* ENVI SCAN=FORX /S:%ScanDpt% %TEnvi%\*.%DEnvi%
%SCAN%,XEnvi,0,TEAM FNAM NEnvi=%XEnvi%|LINK %PathLNK%\%NEnvi%,%XEnvi%
}}}
-----------------------------------------------------------------------------------------
Количество путей и количество расширений не ограничено. Как, при желании, и глубина сканирования. Главное - не перестараться, чтобы не было "всё небо в попугаях" (рабочий стол).
-Предлагаю все обсуждения вести в этой теме, а тут постить только готовые скрипты.


Display posts:    

Current time is: 19-Sep 12:48

All times are UTC + 3


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum