jslegers Posted July 25, 2008 Share Posted July 25, 2008 Hi, I want to make a script that can read a text file and uses the search results as variables. Here is the test file : ListUsbDrives V1.7.7 Lists attached USB drives and their USB port names for USBDLM Freeware by Uwe Sieber - www.uwe-sieber.de Current User = JSL LogonType = local Member of groups = Debugger Users, Gebruikers foutopsporing, Administrators Admin = yes MountPoint = F:\ Volume Label = PORT_APPS Volume Size = 1 GB (FAT32) Volume Name = \\?\Volume{84913105-cda4-11db-8fee-0018debf0475}\ MultiCardReader = no NoMediaNoLetter = yes Drive Type = removable drive Bus Type = USB Device Types = HotPlug Drive DevID = USBSTOR\DISK&VEN_KINGSTON&PROD_DT_ELITE_HS_2.0&REV_5.02\07A11C415350E8C0&0 Ctrl DevID = USB\VID_08EC&PID_0015\07A11C415350E8C0 Host Controller = Intel® 82801G (ICH7 Family) USB2 Enhanced Host Controller - 27CC Volume DosDevName = \Device\Harddisk3\DP(1)0-0+a Disk DosDevName = \Device\000000cc Device Number = 3 Removal Policy = surprise removal Partition Number = 1 of 1 Friendly Name = Kingston DT Elite HS 2.0 USB Version = 2.0 (high speed) USB Friendl. Name = Kingston DT Elite HS 2.0 USB Serial = 07A11C415350E8C0 USB Port Name = 5-6 MountPoint = P:\ Volume Label = Samsung External Volume Size = 250 GB (NTFS) Disk Size = 250 GB Volume Name = \\?\Volume{4362ce19-9f49-11dc-92bd-005056c00008}\ MultiCardReader = no NoMediaNoLetter = no Drive Type = fixed drive Bus Type = USB Device Types = HotPlug Drive DevID = USBSTOR\DISK&VEN_SAMSUNG&PROD_HM250JI&REV_0-08\30464D007365&0 Ctrl DevID = USB\VID_152D&PID_2338\30464D007365 Host Controller = Intel® 82801G (ICH7 Family) USB2 Enhanced Host Controller - 27CC Volume DosDevName = \Device\HarddiskVolume3 Disk DosDevName = \Device\000000c6 Device Number = 1 Removal Policy = surprise removal Partition Number = 1 of 1 Friendly Name = SAMSUNG HM250JI USB Version = 2.0 (high speed) USB Friendl. Name = JMicron USB to ATA/ATAPI Bridge USB Serial = 30464D007365 USB Port Name = 5-5 MountPoint = U:\ Volume Label = --- Volume Size = 130 MB (FAT32) Volume Name = \\?\Volume{47ec7e40-d2e0-11db-9000-00170845b81d}\ MultiCardReader = no NoMediaNoLetter = yes Drive Type = removable drive Bus Type = USB Device Types = HotPlug Drive DevID = USBSTOR\DISK&VEN_USB&PROD_FLASH_DRIVE&REV_1.12\070B000414B0B70&0 Ctrl DevID = USB\VID_1005&PID_B113\070B000414B0B70 Host Controller = Intel® 82801G (ICH7 Family) USB2 Enhanced Host Controller - 27CC Volume DosDevName = \Device\Harddisk2\DP(1)0-0+8 Disk DosDevName = \Device\000000c9 Device Number = 2 Removal Policy = surprise removal Partition Number = 1 of 1 Friendly Name = USB Flash Drive USB Version = 2.0 (high speed) USB Friendl. Name = USB Flash Drive USB Serial = 070B000414B0B70 USB Port Name = 5-4 I want to make an script that reads this file and creates variables from the names after Frinedly Name. For exapmle $var1 =Kingston DT Elite HS 2.0 $var2 = SAMSUNG HM250JI and so one. If the text has more friendly names filled it must produce more variables. If tried out this test script below but doesn't work : #include <File.au3> ;RunWait (@ComSpec & " /c ListUsbDrives.exe > usbdrives.txt", @ScriptDir, @SW_HIDE ) $Usbfile = FileOpen ( @ScriptDir & "\usbdrives.txt", 1 ) $Lines = _FileCountLines($Usbfile) ConsoleWrite ( $Usbfile & @LF ) ConsoleWrite ( $Lines & @LF ) $File = $Usbfile For $Index = 1 To $Lines $Data = FileReadLine($File,$Index) If StringInStr($Data,"Friendly Name") Then $String = StringStripWS($Data,2) $Name = StringSplit($String," ") MsgBox(-1,"",$Name[4]) EndIf Next FileClose($File) I have already made an script for removing USB drives but this one only works with P: drive and U: drive. The end result must be something like this : expandcollapse popup#include <GUIConstants.au3> ;Autoit Options AutoItSetOption ( "TrayIconHide", 1 ) ;Defining variables $driveltr = "" $prg = "RemoveDrive.exe" ;Creating GUI GUICreate ( "Select Device", 175, 105, -1, -1, $WS_BORDER ) GUISetState ( @SW_SHOW ) ;Creating radio buttons $radio1 = GUICtrlCreateRadio ( "Portable Harddisk",5 ,5 ,150 ) $radio2 = GUICtrlCreateRadio ( "USB Flash Drive",5 ,25 ,150 ) ;Creating action button $button1 = GUICtrlCreateButton ( "Remove device" ,5 ,47 ,95 ) $button2 = GUICtrlCreateButton ( "Exit" ,130 ,47, 35 ) ;Standard radio1 selected. GUICtrlSetState ( $radio1, $GUI_CHECKED ) ;Displaying GUI until it is closed. While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE or $msg = $button2 ExitLoop Case $msg = $button1 If GUICtrlRead ( $radio1 ) = 1 Then $driveltr="P:" If GUICtrlRead ( $radio2 ) = 1 Then $driveltr="U:" ;RunWait ( $prg & " " & $driveltr, @ScriptDir ) ShellExecute($prg,$driveltr,@Scriptdir) Exit EndSelect Wend Exit But this code only works when you have and USB harddisk mounted to P: and an USB stick to U:. (I use USBDLM for this). I want to make an script that works on every PC without specific drive letters voor USB Stick/Harddisks. Link to comment Share on other sites More sharing options...
BrettF Posted July 25, 2008 Share Posted July 25, 2008 Arrays are probably the easiest way to go here... Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version! Link to comment Share on other sites More sharing options...
Andreik Posted July 25, 2008 Share Posted July 25, 2008 Use WMI Classes for USB. When the words fail... music speaks. Link to comment Share on other sites More sharing options...
jslegers Posted July 25, 2008 Author Share Posted July 25, 2008 Use WMI Classes for USB.How can I use that ? Link to comment Share on other sites More sharing options...
Andreik Posted July 25, 2008 Share Posted July 25, 2008 How can I use that ?Use scriptomatic:http://www.autoitscript.com/forum/index.ph...hl=Scriptomatic When the words fail... music speaks. Link to comment Share on other sites More sharing options...
jslegers Posted July 25, 2008 Author Share Posted July 25, 2008 Arrays are probably the easiest way to go here... Hi, I have tried this but kind figure out how to use the = sign to split it in to two columns. #include <file.au3> #include <Array.au3> #include <String.au3> Local $records $file = ( @ScriptDir & "\Listdrives.txt" ) $array = $file _FileReadToArray ( $array, $records ) _ArrayDisplay ( $records, "Test Array" ) Local $results = _ArraySearch ( $records, "Friendly Name " ) _ArrayDisplay ( $results, "Results" ) Link to comment Share on other sites More sharing options...
zorphnog Posted July 25, 2008 Share Posted July 25, 2008 Here ya go: $hInFile = FileOpen(@ScriptDir & "\usbdrives.txt", 0) $szFileText = FileRead($hInFile) FileClose($hInFile) $arResult = StringRegExp($szFileText, "(?i)friendly name = (.+)", 3) If @error <> 0 Then ConsoleWrite("!> No matches or bad pattern" & @LF) Exit EndIf For $i=0 To UBound($arResult)-1 ConsoleWrite(StringFormat(" [%02d] %s\n", $i, $arResult[$i])) Next Link to comment Share on other sites More sharing options...
jslegers Posted July 26, 2008 Author Share Posted July 26, 2008 Here ya go: $hInFile = FileOpen(@ScriptDir & "\usbdrives.txt", 0) $szFileText = FileRead($hInFile) FileClose($hInFile) $arResult = StringRegExp($szFileText, "(?i)friendly name = (.+)", 3) If @error <> 0 Then ConsoleWrite("!> No matches or bad pattern" & @LF) Exit EndIf For $i=0 To UBound($arResult)-1 ConsoleWrite(StringFormat(" [%02d] %s\n", $i, $arResult[$i])) NextWow you are great thanks a lot. Link to comment Share on other sites More sharing options...
jslegers Posted July 28, 2008 Author Share Posted July 28, 2008 Hi, Is it also posible to use an operator in StringegExp. For example : $arResult = StringRegExp($szFileText, "(?i)friendly name = (.+)", 3) NOT StringRegExp($szFileText, "(?i)Mountpoint = none (.+)", 3) John Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted July 28, 2008 Moderators Share Posted July 28, 2008 Hi,Is it also posible to use an operator in StringegExp.For example :$arResult = StringRegExp($szFileText, "(?i)friendly name = (.+)", 3) NOT StringRegExp($szFileText, "(?i)Mountpoint = none (.+)", 3)Johnhttp://www.regular-expressions.info/ Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now