1 (изменено: Malcev, 2014-02-25 17:39:43)

Тема: AHK: Работа с diskpart

Написал скриптик, который проверяет состояние Рейда на основе diskpart.
В hdd1.txt я прописываю list volume.
А из hdd2.txt парсю результат.
Возможно ли легким способом обойтись без создания этих файлов?
То есть, передать list volume в diskpart и скопировать в буфер обмена результат.

#NoTrayIcon
loop
{
   FileDelete, C:\hdd1.txt
   FileDelete, C:\hdd2.txt
   FileAppend, list volume, C:\hdd1.txt
   Runwait, %comspec% /c ""DISKPART.exe" "/s" "C:\hdd1.txt" > "C:\hdd2.txt"", , hide
   Loop, read,  C:\hdd2.txt
   {
      If (instr(A_LoopReadLine, "Failed") || instr(A_LoopReadLine, "At Risk"))
      {
         errors = 1
         StringMid, disk, A_LoopReadLine, 16, 1
         break
      }
   }
   FileDelete, C:\hdd1.txt
   FileDelete, C:\hdd2.txt
   If errors = 1
   {
      Menu, Tray, Icon
      Gui,+AlwaysOnTop
      Gui, -MinimizeBox -MaximizeBox
      Gui, Font, s80, Times New Roman
      Gui, Add, Text,, Problema s Raid: %disk%
      Gui, Show,, RaidError
      Gui, +LastFound
      OnMessage(0x112, "WM_SYSCOMMAND")
      Return
   }
   sleep, 3600000
}

WM_SYSCOMMAND(wParam)
{
   if (A_Gui = 1 && wParam = 0xF060) ; SC_CLOSE
      return 0
} 

2

Re: AHK: Работа с diskpart

Разобрался.

#NoTrayIcon
loop
{
   Runwait, %comspec% /c echo list volume | diskpart.exe | clip, , hide
   diskpart := Clipboard
   Loop, Parse, diskpart, `n, `r
   {
      If (instr(A_LoopField, "Failed") || instr(A_LoopField, "At Risk"))
      {
         errors = 1
         StringMid, disk, A_LoopField, 16, 1
         break
      }
   }
   If errors = 1
   {
      Menu, Tray, Icon
      Gui,+AlwaysOnTop
      Gui, -MinimizeBox -MaximizeBox
      Gui, Font, s80, Times New Roman
      Gui, Add, Text,, Problema s Raid: %disk%
      Gui, Show,, RaidError
      Gui, +LastFound
      OnMessage(0x112, "WM_SYSCOMMAND")
      Return
   }
   sleep, 3600000
}

WM_SYSCOMMAND(wParam)
{
   if (A_Gui = 1 && wParam = 0xF060) ; SC_CLOSE
      return 0
}