Плагин strings.spf [30/08/2014 14:08]

Обсуждение программ nnCron и nnCron LITE

Re: Плагин strings.spf [30/10/2012 00:31]

Postby SeMa » Wed, 31 Oct 2012, 15:15

VoidVolker wrote:Нет таких слов.

разобрался
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Плагин strings.spf [31/10/2012 20:57]

Postby VoidVolker » Wed, 31 Oct 2012, 20:00

Ап! Исправлена ошибка вставки в подстроке переменной окружения в режиме компиляции. Несколько мелких доработок.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин strings.spf [31/10/2012 20:57]

Postby VoidVolker » Thu, 01 Nov 2012, 21:51

Что-то мне кажется неудобным r" и особенно +r". Есть у кого какие идеи/предложения/пожелания? Мне вот кажется более простым и логичным сделать выключение экранирования строками с апострофом:
Code: Select all
s' C:\path\file.ext'

Code: Select all
+' path\file.ext'
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин strings.spf [31/10/2012 20:57]

Postby SeMa » Fri, 02 Nov 2012, 15:32

VoidVolker wrote:Что-то мне кажется неудобным r" и особенно +r".

А чем? Буква не нравится ;)?
Может \" и +\" ?
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Плагин strings.spf [31/10/2012 20:57]

Postby VoidVolker » Fri, 02 Nov 2012, 19:14

Лишний символ.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин strings.spf [31/10/2012 20:57]

Postby ask » Sun, 04 Nov 2012, 20:35

Несколько дней полёт нормальный. Даже в сложных местах :)
ask
 
Posts: 56
Joined: Sun, 11 Dec 2011, 09:38

Re: Плагин strings.spf [05/11/2012 15:41]

Postby VoidVolker » Mon, 05 Nov 2012, 20:33

Ап! Мелкие изменения.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин strings.spf [05/11/2012 15:41]

Postby SeMa » Fri, 23 Nov 2012, 17:50

Не знаю, куда написать - сюда или в темы по задачам, но проблема, похоже, здесь.
После перехода на сабж появились ошибки при подключении задач от Moriturus (естественно, адаптированные под плагин):
1. delete_duplicate_files_MD5-size
23.11.12 14:50:21 2756 delete_duplicate_files_MD5-size: Crontab syntax ERROR!!!. Task file: D:\EWSD\nnCron\_testMD5dup.tab. Line: 39
указывает на строку
Code: Select all
STRING-LIST: list_of_md5

Если я её комментирую, ошибка ссылается на следующую строку
Code: Select all
STRING-LIST: list_of_duplicate_files

В nncron.out
EXCEPTION! CODE:C0000005 ADDRESS:4B2991 WORD:CMOVE REGISTERS:
48FD04 2A 00 1B 01 00 00 00 00 DE 99 64 01 14 E5 90 7C *.......Ю™d..еђ|
48FD14 6D 66 12 00 B4 99 49 00 60 EE 48 00 91 29 4B 00 mf..ґ™I.`оH.‘)K.
48FD24 1B 00 00 00 02 02 01 00 34 FF 48 00 23 00 00 00 ........4яH.#...
USER DATA: 491E94 HANDLER: 48EE80 RETURN STACK:
48EE60 : 491E94 <not found>
48EE64 : 5178B4 SPAD+
48EE68 : 5189B8 ?sub+
48EE6C : 5228DF (LIST)
48EE70 : 533314 ddm_method
48EE74 : 52365D STRING-LIST:
48EE78 : 4B8134 INTERPRET
48EE7C : 4B4AD3 CATCH
48EE80 : 48EEBC <not found>

2. Check_HDD's_S.M.A.R.T.
23.11.12 14:50:23 2756 Check_HDD's_S.M.A.R.T.: Crontab syntax ERROR!!!. Task file: D:\EWSD\nnCron\_testSMART.tab. Line: 127
ссылается на строки задачи, где присутсвуют стринги с esc-последовательностями:
Code: Select all
" File \n%2SWAP%\n does not exist." DROP 0 MessageBoxA DROP
...
" Hard disk %$1% is going to die:\n" 2SWAP
...

В nncron.out отзыва нет.

Вынес задачи в отдельные табы (текст оригинальный). Отключил все плагины, кроме нужных. Ничего не помогает.

nncron.ini
Code: Select all
\ This file contains nnCron settings.
ShowErrorMsg ON

Crontab: "_testMD5dup.tab"
Crontab: "_testSMART.tab"
Editor: "far_edit.bat"
Language: English
Cronlog: "log\nncron%YYYY%.log"
LogTimeFormat: "%DD%.%MM%.%YY% %hh%:%mm%:%ss% %ThreadId%"
YearField ON
CompleteTaskTimeout: 2000
QueryStartTimeout: 30
QueryStartAnswer: Yes
DefaultOpenMode: ShowNormal
DefaultPriority: NormalPriority
DefaultLogonType: LogonInteractive
SysTrayIcon ON
IconForAdminsOnly OFF
MonitorResponseTime: 100
BackupPath: "backup"
WatchWinCreateDelay: 100
WatchProcDelay: 1000
Console OFF
ItemExit ON
ItemOptions ON
ItemConsole ON
ItemReload ON
ItemSuspend ON
MenuHotKey: ""
Guard OFF
DialOnce OFF
RunAsDefaultUser OFF
DefaultUser: xx
DefaultPassword:
DefaultDomain: zz
DefaultLoadProfile OFF
GUIAsUser OFF
GUIUser: xx
GUIPassword:
GUIDomain: zz
GUILoadProfile ON
SyntaxRestriction OFF
RemConsole ON
RemConsolePort: 2002
RemAllowed: 127.0.0.1
RemDisallowed: x.x.x.x
Log2StdOut OFF
\ DefaultRunMissedTime: 15
ReloadImmediately ON
TrayIconDoubleClick: START-CONSOLE
TrayIconRightButton: menu
TrayIconBalloonClick: NOOP
PerfMonitor OFF
MaxClipboardSize: 10240

INCLUDE "plugins\extwords.spf"
INCLUDE "plugins\strings.spf"
INCLUDE "plugins\lists.spf"

: CRONTAB-ERROR 10 1 DO 100 I 100 * BEEP LOOP ;
: REMINDER-SOUND 500 500 BEEP ;
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Плагин strings.spf [05/11/2012 15:41]

Postby VoidVolker » Fri, 23 Nov 2012, 18:16

Надо просто обновить и плагин со списками: http://www.nncron.ru/download/plugins/vv/lists.spf
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин strings.spf [05/11/2012 15:41]

Postby SeMa » Mon, 26 Nov 2012, 16:45

VoidVolker wrote:Надо просто обновить и плагин со списками: http://www.nncron.ru/download/plugins/vv/lists.spf

0. Да вроде информации об изменениях в lists.spf не было - на форуме последнее сообщение о версии 25.09.2012. Поэтому и не приходило в голову обновить.

1. delete_duplicate_files_MD5-size заработал, но...
1а. Сообщение о результатах поиска (с проглатыванием 1х букв):
Уникальных по хешу файлов: 10
опий: 3
ывести список?
[Да] [Нет]

1б. При выводе списка в TXT:
на каждое вхождение дубликатов в файл-"список" выводятся имена файлов !С КУСКОМ КОДА ЗАДАЧИ!
D:\!\blst111121
StringReplace CRLF CRLF S+ S+ S+
THEN
)list_of_duplicate_files
3 PICK 3 PICK FWRITE
открываем созданный xt
START-APP
THEN
4096 32 4 + + " Поиск одинаковых по хешу файлов" DROP
" Удалить одинаковые по хешу файлы (5 шт.)?"
DROP 0 MessageBoxA 6 =
IF
list_of_duplicate_files(
NODE@ 2DUP soh StringGetPos /STRING FDELETE
)list_of_duplicate_files
4096 32 + " Поиск одинаковых по хешу файлоD:\!\blst119999

D:\!\blst120712
StringReplace ориг. + копия через перенос и таб.
S ringReplace заменяем ориг. строку на оригинальную + копия через таб.
ELSE
NODE@ soh "
StringReplace CRLF CRLF S+ S+ S+
THEN
)list_of_duplicate_files
3 PICK 3 PICK FWRITE
открываем созданный xt
START-APP
THEN
4096 32 4 + + " Поиск одинаковых по хешу файлов" DROP
" Удалить одинаковые по хешу файлы (5 шт.)?"
DROP 0 MessageBoxA D:\!\blst120779
StringReplace ориг. + копия через перенос и таб.
S ringReplace заменяем ориг. строку на оригинальную + копия через таб.
ELSE
NODE@ soh "
StringReplace CRLF CRLF S+ S+ S+
THEN
)list_of_duplicate_files
3 PICK 3 PICK FWRITE
открываем созданный xt
START-APP
THEN
4096 32 4 + + " Поиск одинаковых по хешу файлов" DROP
" Удалить одинаковые по хешу файлы (5 шт.)?"
DROP 0 MessageBoxA D:\!\blst120778
StringReplace CRLF CRLF S+ S+ S+
THEN
)list_of_duplicate_files
3 PICK 3 PICK FWRITE
открываем созданный xt
START-APP
THEN
4096 32 4 + + " Поиск одинаковых по хешу файлов" DROP
" Удалить одинаковые по хешу файлы (5 шт.)?"
DROP 0 MessageBoxA 6 =
IF
list_of_duplicate_files(
NODE@ 2DUP soh StringGetPos /STRING FDELETE
)list_of_duplicate_files
4096 32 + " Поиск одинаковых по хешу файлоD:\!\blst120777

D:\!\blst120914
StringReplace CRLF CRLF S+ S+ S+
THEN
)list_of_duplicate_files
3 PICK 3 PICK FWRITE
открываем созданный xt
START-APP
THEN
4096 32 4 + + " Поиск одинаковых по хешу файлов" DROP
" Удалить одинаковые по хешу файлы (5 шт.)?"
DROP 0 MessageBoxA 6 =
IF
list_of_duplicate_files(
NODE@ 2DUP soh StringGetPos /STRING FDELETE
)list_of_duplicate_files
4096 32 + " Поиск одинаковых по хешу файлоD:\!\blst120999

где перед StringReplace - уникальный файл, далее - копия (здесь - с неправильными датами).
В данном примере на 1й и 3й оригиналы - по одной копии, на 2й - три.

2. Check_HDD's_S.M.A.R.T.
Осталось по-прежнему.

Что я упустил?
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Плагин strings.spf [05/11/2012 15:41]

Postby SeMa » Mon, 26 Nov 2012, 18:40

Как правильно в сабже сформировать строку для разворачивания переменных внутри переменных и переменных окружения на образцах
1. START-APP: %COMSPEC% /c net stop nncron && start/wait nncron.exe 10000 PAUSE BYE && net start nncron
2. FILE-COPY: "%cron.log +ModuleDirName%" "%cron.log +ModuleDirName%_%YY%%MM%%DD%.tmp"
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Плагин strings.spf [05/11/2012 15:41]

Postby VoidVolker » Mon, 26 Nov 2012, 19:29

SeMa wrote:Да вроде информации об изменениях в lists.spf не было - на форуме последнее сообщение о версии 25.09.2012. Поэтому и не приходило в голову обновить.

Все правильно: в теме про списки версия под старый плагин, а эта версия с учетом особенностей нового плагина — они между собой не совместимы.
SeMa wrote:1. delete_duplicate_files_MD5-size заработал, но...1а. Сообщение о результатах поиска (с проглатыванием 1х букв):

SeMa wrote:2. Check_HDD's_S.M.A.R.T.Осталось по-прежнему.

Ммм... Не понял ничего. Можешь привести чистый код, показывающий ошибку?

SeMa wrote:Как правильно в сабже сформировать строку для разворачивания переменных внутри переменных и переменных окружения на образцах
1. START-APP: %COMSPEC% /c net stop nncron && start/wait nncron.exe 10000 PAUSE BYE && net start nncron
2. FILE-COPY: "%cron.log +ModuleDirName%" "%cron.log +ModuleDirName%_%YY%%MM%%DD%.tmp"

В первом случае все то же самое:
Code: Select all
"  %COMSPEC% /c net stop nncron && start/wait nncron.exe 10000 PAUSE BYE && net start nncron" START-APP

А вот во втором случае несколько интереснее... Хмхм... Ага, вот тут надо бы еще кое-что...
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин strings.spf [05/11/2012 15:41]

Postby SeMa » Tue, 27 Nov 2012, 10:44

VoidVolker wrote:В первом случае все то же самое:
Code: Select all
"  %COMSPEC% /c net stop nncron && start/wait nncron.exe 10000 PAUSE BYE && net start nncron" START-APP

Почему спросил, просто из консоли не выполняется:
Code: Select all
"  %COMSPEC% /c net stop nncron && start/wait nncron.exe 10000 PAUSE BYE && net start nncron" START-APP
EXCEPTION!  CODE:C0000005  ADDRESS:4B2240  WORD:@  REGISTERS:
385ED94   94 1E 25 01  A1 BA 25 01  0C 00 00 00  14 E5 90 7C ".%.Ўє%......е_|
385EDA4   00 00 00 00  0C 00 00 00  AC FF 85 03  40 22 4B 00 ........┐я:.@"K.
385EDB4   1B 00 00 00  06 02 01 00  C4 EF 85 03  23 00 00 00 ........Дп:.#...
USER DATA: 1251E94 HANDLER: 385EFE8 RETURN STACK:
385EFC4 :  4E12E9 CUR-FLAG?
385EFC8 :  4E134B CF-LOGGING?
385EFCC :  4E1562 ?CRON-LOG
385EFD0 :  4E8F11 (START-APP)
385EFD4 :  0 <not found>
385EFD8 :  4E9135 START-APP
385EFDC :  4B8134 INTERPRET
385EFE0 :  4B82A7 MAIN1
385EFE4 :  4B4AD3 CATCH
385EFE8 :  385EFE8 <not in the image>

"  %COMSPEC  /c net stop nncron && start/wait nncron.exe 10000 PAUSE BYE && net start nncron" START-APP
                                                                                                     ^ 0xC0000005L ACCESS_VIOLATION

Снова те же грабли с 2мя кронами. Из задачи — нормально.
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Плагин strings.spf [05/11/2012 15:41]

Postby SeMa » Tue, 27 Nov 2012, 11:41

VoidVolker wrote:Ммм... Не понял ничего. Можешь привести чистый код, показывающий ошибку?

1. delete_duplicate_files_MD5-size
Вот кронтаб _testMD5.tab с этой единственной задачей:
Code: Select all
<%
\ разрешение экрана
: xRes
GetDesktopSize DROP
;
: yRes
GetDesktopSize SWAP DROP
;
: mRes
GetDesktopSize + 2 /
;
CREATE soh_zstr 1 C,  0 C,
: soh soh_zstr 1 ;
: StringGetPos { a1 u1 a2 u2 -- pos}
a1 u1 a2 u2 SEARCH IF DROP a1 - 1+ ELSE 2DROP 0 THEN
;
: StringReplace { a1 u1 a2 u2  a3 u3 \ rest a4 u4 buf -- a u }  \ Заменить в строке 1 подстроку 2 на строку 3, на стеке останется измененая строка
  AT buf TO a4
  a1 u1
  BEGIN OVER SWAP a2 u2 SEARCH WHILE
    TO rest SWAP 2DUP - a4 u4 2SWAP S+ TO u4 TO a4
    a3 u3 a4 u4 2SWAP S+ TO u4 TO a4
    rest u2 /STRING
  REPEAT
  a4 u4 2SWAP S+
  ROT DROP
;

%>

#( delete_duplicate_files_MD5-size
\ 9:43 03.09.2012
NoLog
NoActive
SingleInstance

USER-CREATE ddm_name 255 USER-ALLOT
USER-CREATE ddm_method 255 USER-ALLOT
STRING-LIST: list_of_md5
STRING-LIST: list_of_duplicate_files
: FILE-MD5   \ ( a u -- a1 u1 )
  PAD 256 ERASE
  PAD ROT ROT MD5File DROP
  PAD MD5String
;
Action:
4096 32 3 + + S" Поиск дубликатов" DROP
" Каким способом ищем:\nДа — по хешу, нет — по размеру"
DROP 0 MessageBoxA
CASE
6 OF S" по хешу" ddm_name PLACE S" FILE-MD5" ddm_method PLACE ENDOF
7 OF S" по размеру" ddm_name PLACE S" FSIZE DOUBLE>S" ddm_method PLACE ENDOF
DUP OF EXIT ENDOF
ENDCASE
WIN-INPUT-TEXT: "Поиск одинаковых файлов (%ddm_name COUNT%)" "Путь с маской:" "" 0
IF
   EXIT
THEN
mRes 10 / RANDOM 20 + DUP HINT-POS
0x28A432 0x000000 HINT-COLOR
HINT: "Поиск одинаковых %ddm_name COUNT% файлов..."
RECURSIVE SKIPERRORS
FOR-FILES
   IS-DIR? NOT
   IF
      FOUND-FULLPATH ddm_method COUNT EVALUATE
      \ флаг, чтобы понять нашлось в списке или нет:
      TRUE
      list_of_md5(
         2 PICK 2 PICK NODE@ 2DUP soh StringGetPos 1 - MIN COMPARE 0=
         IF \ есть в списке, т.е. повтор:
            NODE@ 2DUP soh StringGetPos /STRING soh S+ FOUND-FULLPATH S+ list_of_duplicate_files!
            \ инвертируем флаг:
            INVERT
            LIST-EXIT
         THEN
      )list_of_md5
      IF
         \ не нашлось, значит уникальный:
         soh S+ FOUND-FULLPATH S+ list_of_md5!
      ELSE
         2DROP
      THEN
   THEN
;FOR-FILES
HINT-OFF
4096 32 4 + + " Поиск одинаковых %ddm_name COUNT% файлов" DROP
" Уникальных %ddm_name COUNT% файлов: %list_of_md5# N>S%\nКопий: %list_of_duplicate_files# N>S%\nВывести список?"
DROP 0 MessageBoxA 6 =
IF
   S" TEMP" ENV 2DUP DUP 1 - /STRING S" \" COMPARE
   IF
      \ на случай, если в системной переменной нет обратной черты:
      S" \" S+
   THEN
   TempFile S+ S" .txt" S+
   ""
   list_of_duplicate_files(
      \ есть ли такой оригинал в строке
      2DUP NODE@ 2DUP soh StringGetPos 1 - MIN StringGetPos
      IF
         NODE@ 2DUP soh StringGetPos 1 - MIN \ строка ориг. файла
         NODE@ soh " \n" StringReplace \ ориг. + копия через перенос и таб.
         StringReplace \ заменяем ориг. строку на оригинальную + копия через таб.
      ELSE
         NODE@ soh " \n" StringReplace CRLF CRLF S+ S+ S+
      THEN
   )list_of_duplicate_files
   3 PICK 3 PICK FWRITE
   \ открываем созданный txt
   START-APP
THEN
4096 32 4 + + " Поиск одинаковых %ddm_name COUNT% файлов" DROP
" Удалить одинаковые %ddm_name COUNT% файлы (%list_of_duplicate_files# N>S% шт.)?"
DROP 0 MessageBoxA 6 =
IF
   list_of_duplicate_files(
      NODE@ 2DUP soh StringGetPos /STRING FDELETE
   )list_of_duplicate_files
   4096 32 + " Поиск одинаковых %ddm_name COUNT% файлов" DROP
   " Одинаковые %ddm_name COUNT% файлы удалены"
   DROP 0 MessageBoxA DROP
THEN
list_of_md5 LIST-FREE
list_of_duplicate_files LIST-FREE
)#

Строка 88 - сообщение о результатах поиска.
При работе задачи получил
Уникальных по хешу файлов: 10
опий: 3
ывести список?
[Да] [Нет]
"Проглочены" буквы, перед которыми в коде стоит \n.
Нажимаю "Да". Открывается блокнот со "списком" найденных файлов с куском кода (жаль, что в форуме нет спойлеров)
D:\!\blst111121
StringReplace CRLF CRLF S+ S+ S+
THEN
)list_of_duplicate_files
3 PICK 3 PICK FWRITE
открываем созданный xt
START-APP
THEN
4096 32 4 + + " Поиск одинаковых по хешу файлов" DROP
" Удалить одинаковые по хешу файлы (5 шт.)?"
DROP 0 MessageBoxA 6 =
IF
list_of_duplicate_files(
NODE@ 2DUP soh StringGetPos /STRING FDELETE
)list_of_duplicate_files
4096 32 + " Поиск одинаковых по хешу файлоD:\!\blst119999

D:\!\blst120712
StringReplace ориг. + копия через перенос и таб.
S ringReplace заменяем ориг. строку на оригинальную + копия через таб.
ELSE
NODE@ soh "
StringReplace CRLF CRLF S+ S+ S+
THEN
)list_of_duplicate_files
3 PICK 3 PICK FWRITE
открываем созданный xt
START-APP
THEN
4096 32 4 + + " Поиск одинаковых по хешу файлов" DROP
" Удалить одинаковые по хешу файлы (5 шт.)?"
DROP 0 MessageBoxA D:\!\blst120779
StringReplace ориг. + копия через перенос и таб.
S ringReplace заменяем ориг. строку на оригинальную + копия через таб.
ELSE
NODE@ soh "
StringReplace CRLF CRLF S+ S+ S+
THEN
)list_of_duplicate_files
3 PICK 3 PICK FWRITE
открываем созданный xt
START-APP
THEN
4096 32 4 + + " Поиск одинаковых по хешу файлов" DROP
" Удалить одинаковые по хешу файлы (5 шт.)?"
DROP 0 MessageBoxA D:\!\blst120778
StringReplace CRLF CRLF S+ S+ S+
THEN
)list_of_duplicate_files
3 PICK 3 PICK FWRITE
открываем созданный xt
START-APP
THEN
4096 32 4 + + " Поиск одинаковых по хешу файлов" DROP
" Удалить одинаковые по хешу файлы (5 шт.)?"
DROP 0 MessageBoxA 6 =
IF
list_of_duplicate_files(
NODE@ 2DUP soh StringGetPos /STRING FDELETE
)list_of_duplicate_files
4096 32 + " Поиск одинаковых по хешу файлоD:\!\blst120777

D:\!\blst120914
StringReplace CRLF CRLF S+ S+ S+
THEN
)list_of_duplicate_files
3 PICK 3 PICK FWRITE
открываем созданный xt
START-APP
THEN
4096 32 4 + + " Поиск одинаковых по хешу файлов" DROP
" Удалить одинаковые по хешу файлы (5 шт.)?"
DROP 0 MessageBoxA 6 =
IF
list_of_duplicate_files(
NODE@ 2DUP soh StringGetPos /STRING FDELETE
)list_of_duplicate_files
4096 32 + " Поиск одинаковых по хешу файлоD:\!\blst120999

Синие — файлы-оригиналы, зелёные — дубликаты.
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: Плагин strings.spf [05/11/2012 15:41]

Postby SeMa » Tue, 27 Nov 2012, 12:04

2. Check_HDD's_S.M.A.R.T.
Вот кронтаб _testSMART.tab с этой единственной задачей:
Code: Select all
#CRONTAB FILE
# Classic crontab format:
# Minutes Hours Days Months WeekDays Years Command

#( Check_HDD's_S.M.A.R.T.
\ 16:45 11.10.2012
\ Каждый день в 10 с чем-то часов
Time: ? 10 * * * *
RunMissed
\ NoLog
SingleInstance

CREATE smartctl_path 256 ALLOT
0 VALUE smart_verdict
1024 ALLOCATE THROW TO smart_verdict

: disk_letter ( a u -- a1 u1 )      \ буква диска
2DUP S" ;" StringGetPos ?DUP
IF      \ маска может быть не указана
   1 - MIN
THEN
;
: disabled_bitmask ( a u -- b )   \ маска отключенных битов
2DUP S" ;" StringGetPos ?DUP
IF      \ маска может быть не указана
   /STRING S>NUM
ELSE
   2DROP TRUE
THEN
;


: ** ( x y -- x^y ) \ возведение в степень:
1 SWAP 0 ?DO OVER * LOOP NIP
;
: print_bits ( x -- ) \ выводит на консоль биты, которые содержит x
1 -30 DO
   2 0 I - ** /MOD
   IF
      0 I - . CR
   THEN
LOOP
DROP
;
: bit_exist? { v b -- }
v 1 -30 DO
   2 0 I - ** /MOD
   IF
      0 I - b =
      IF
         DROP TRUE LEAVE
      THEN
   THEN
LOOP
?DUP NOT
IF
   FALSE
THEN
;

: run_smartctl { \ b -- }
\ принимает на вход строку с буквой диска (не логического, а физического!)
\ и отключенными битами
2DUP disabled_bitmask TO b
disk_letter \ кладём на стек букву диска из входной строки
"" smart_verdict ZPLACE
SWHide smartctl_path COUNT START-IN
" cmd /c smartctl.exe -a /dev/hd%2SWAP% > smartctl_out" START-APPW
ExitCodeProc ?DUP
IF
   1 -8 DO
      \ делим код возврата на 2 в степени модуля I, чтобы узнать, какие биты ненулевые:
      2 0 I - ** /MOD
      IF
         b 0 I - bit_exist? NOT
         IF
            0 I - CASE
            0 OF
               " Command line did not parse. \n"
               smart_verdict +ZPLACE
            ENDOF
            1 OF
               " Device open failed, device did not return an IDENTIFY DEVICE structure, or device is in a low-power mode. \n"
               smart_verdict +ZPLACE
            ENDOF
            2 OF
               " Some SMART or other ATA command to the disk failed, or there was a checksum error in a SMART data structure. \n"
               smart_verdict +ZPLACE
            ENDOF
            3 OF
               " SMART status check returned «DISK FAILING».\n"
               smart_verdict +ZPLACE
            ENDOF
            4 OF
               " We found prefail Attributes <= threshold. \n"
               smart_verdict +ZPLACE
            ENDOF
            5 OF
               " SMART status check returned «DISK OK» but we found that some (usage or prefail) Attributes have been <= threshold at some time in the past. \n"
               smart_verdict +ZPLACE
            ENDOF
            6 OF
               " The device error log contains records of errors. \n"
               smart_verdict +ZPLACE
            ENDOF
            7 OF
               " The device self-test log contains records of errors. [ATA only] Failed self-tests outdated by a newer successful extended self-test are ignored. \n"
               smart_verdict +ZPLACE
            ENDOF
            DUP OF
               4096 16 + S" Check HDD's S.M.A.R.T." DROP
               " Unexpected bit: %0 I - N>S%" DROP 0 MessageBoxA DROP
               EXIT
            ENDCASE
         THEN
      THEN
   LOOP
   DROP
THEN
smartctl_path COUNT S" \smartctl_out" S+
2DUP
EXIST? \ файл существует?
IF
   FILE 2DUP
ELSE
   4096 16 + S" Check HDD's S.M.A.R.T." DROP
   " File \n%2SWAP%\n does not exist." DROP 0 MessageBoxA DROP
   EXIT
THEN
S" /Device\sModel:\s+([\w\d\s\-]+)\r\n.+SMART\ssupport\sis:\s.+SMART\ssupport\s\is:\s+(\w+)/si" RE-MATCH
IF
   \ смарт вообще включен?
   $2 S" Enabled" ICOMPARE 0=
   IF
      \ кладём на стек строку с моделью диска:
      " Hard disk %$1% is going to die:\n" 2SWAP
      S" /\r\n\s{0,3}\d{1,3}\s([\w\_]+)\s+0x[\da-f]{4}\s+\d+\s+\d+\s+\d+\s+Pre-fail\s+Always\s+([\w\_]+)/is"
      RE-ALL
         " %$1%    %$2%\n" S+
      ;RE-ALL
      \ по наличию 4 пробелов узнаём, приросла ли строка ошибками:
      2DUP S"     " StringGetPos
      IF
         \ тревога!
         mRes 10 / RANDOM 20 + DUP HINT-POS
         0x000000 0xFF0000 HINT-COLOR
         2DUP HINT CRLF S"  " StringReplace CRON-LOG
      ELSE
         2DROP
      THEN
   ELSE
      2DROP
      4096 16 + S" Check HDD's S.M.A.R.T." DROP
      " Hard disk \n%$1%\nS.M.A.R.T. disabled!" DROP 0 MessageBoxA DROP
   THEN
ELSE
      4096 16 + S" Check HDD's S.M.A.R.T." DROP
      S" Could not find matching strings" DROP 0 MessageBoxA DROP
THEN
smart_verdict ASCIIZ> NIP
IF
      4096 16 + S" Check HDD's S.M.A.R.T." DROP
      smart_verdict 0 MessageBoxA DROP
ELSE
   smartctl_path COUNT S" \smartctl_out" S+ FDELETE
THEN
;
Action:
\ Скачать последнюю версию:
\ http://sourceforge.net/projects/smartmontools/files/smartmontools/

\ получить список дисков:
\ smartctl.exe --scan

\ выяснить, включен ли S.M.A.R.T. у конкретного диска:
\ smartctl -i /dev/hda

\ папка в которую установлен smartctl.exe:
S" c:\Program Files\smartmontools\bin\" smartctl_path PLACE

\ буква жёсткого диска (не логического!) и исключающая маска:
S" a;64" run_smartctl
)#

При загрузке кронтаба получаю ошибку
27.11.12 10:02:11 2812 Check_HDD's_S.M.A.R.T.: Crontab syntax ERROR!!!. Task file: D:\EWSD\nnCron\_testSMART.tab. Line: 127
27.11.12 10:02:12 2812 CRONTAB LOADING. Stack has garbage (8)

Убираю из кода в строке \n.
Получаю ошибку в другой строке. И т.д.
Проанализировав, понял, что ошибки возникают в строках, где вместе используется esc-последовательность (здесь — только \n) и переменная. Вот все эти строки:
" File \n%2SWAP%\n does not exist." DROP 0 MessageBoxA DROP
...
" Hard disk %$1% is going to die:\n" 2SWAP
...
" %$1% %$2%\n" S+
...
" Hard disk \n%$1%\nS.M.A.R.T. disabled!" DROP 0 MessageBoxA DROP

И вот ещё что. Содержимое nncron.out при первой загрузке и получении ошибки:
<# isn't unique
#> isn't unique
DOUBLE>S isn't unique
N>S isn't unique
[ELSE] isn't unique
[IF] isn't unique
[THEN] isn't unique
nnCron. v 1.91 Build 1083 21.03.2006
Copyright (C) 2000-2012 nnSoft. email:nemtsev@nncron.ru
Зарегистрирован только для некоммерческого использования
Registered for non-commercial use only
LIST (
) LIST
LIST (
) LIST

При повторном перечитывании кронтаба (естественно с ошибкой) каждый раз добавляется
LIST (
) LIST
LIST (
) LIST
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 5 guests