copekyle Posted May 15, 2014 Posted May 15, 2014 I'm new to autoit and I'm not sure where to start. I have to move a file to 128 micro sd cards and then format them and check to make sure the file is erased. (Basically checking their ability to r/w and then formatting for use in a product) I'm not sure how to recognize that I plugged in my card. Everything else I can pretty much figure out. Anyone know an easy way to do this? Kyle
JustSomeone Posted May 15, 2014 Posted May 15, 2014 Maybe use DriveStatus and when it becomes ready execute a file write, if its successful format it
Solution JustSomeone Posted May 15, 2014 Solution Posted May 15, 2014 There is an example, please read it before using it expandcollapse popup#include <MsgBoxConstants.au3> #include <File.au3> HotKeySet("{ESC}", "Terminate") ; Hotkey to exit the program HotKeySet("{F4}", "aTestFile") ; hotkey to check for the SD card, try to write file and then format it Global $sDrive = "F:" ; insert the card's letter here Global $eFormat = 0 ; set this to 1 to enable formating, made like this so i will be sure noone will accidently format his drives because he didnt read While 1 Sleep(100) WEnd Func Terminate() Exit EndFunc Func aTestFile() Local $i Local $ready = "READY" For $i = 1 to 60 sleep(1000) Local $sStatus = DriveStatus($sDrive) If $sStatus = $ready Then _FileCreate($sDrive & "\test.tmp") If @error Then MsgBox($MB_SYSTEMMODAL, "Error", " Error creating temp file",5) ExitLoop EndIf FileDelete($sDrive & "\test.tmp") If @error Then MsgBox($MB_SYSTEMMODAL, "Error", " Error deleting temp file",5) ExitLoop EndIf sleep(5) If $eFormat = 1 Then RunWait(@ComSpec & " /C format " & $sDrive & " /Q /y") ;ProcessClose("cmd.exe") ProcessWaitClose("cmd.exe") MsgBox($MB_SYSTEMMODAL, "Success","Format completed, please change the card and press the hotkey again", 5) Else MsgBox($MB_SYSTEMMODAL, "Error", "Format C: /Q /y is the way of the hero",5) ; yea EndIf ExitLoop ElseIf $i < 30 And $sStatus <> $ready Then ConsoleWrite($i & @CRLF) ConsoleWrite("Status of the drive : " & $sStatus & @CRLF) ElseIf $i = 30 OR $i > 30 And $sStatus <> $ready Then MsgBox($MB_SYSTEMMODAL, "Error", " Drive was not become ready within 30 seconds,card might be broken",5) ExitLoop EndIf Next EndFunc
copekyle Posted May 15, 2014 Author Posted May 15, 2014 (edited) ok. I like the idea of using the DriveStatus command. Now I have to figure out a way for the program to loop. I can't think of a good way to do this. If I do this: while DriveStatus(H:)= "Ready" ;send file ;format wend Then it will just do it over and over again while it's plugged in. But if I use an "If" statement then it will only execute once. Maybe I'm over thinking this? You replied while I was typing this... I'll give it a try Edited May 15, 2014 by copekyle
JustSomeone Posted May 15, 2014 Posted May 15, 2014 (edited) ok. I like the idea of using the DriveStatus command. Now I have to figure out a way for the program to loop. I can't think of a good way to do this. If I do this: while DriveStatus(H:)= "Ready" ;send file ;format wend Then it will just do it over and over again while it's plugged in. But if I use an "If" statement then it will only execute once. Maybe I'm over thinking this? You replied while I was typing this... I'll give it a try Just make triplesure you have read it and changing it according your needs EDIT: if it works for you, mark this as solved to help other people in the future, if they need this Edited May 15, 2014 by JustSomeone
copekyle Posted May 15, 2014 Author Posted May 15, 2014 I was hoping that I could just wait for the card to be plugged in and execute automatically when it is ready. Then give a success box when finished and I could unplug the finished card and plug the next one and have it start when the device is ready.
copekyle Posted May 15, 2014 Author Posted May 15, 2014 I feel like an idiot asking this but why is the " /y " switch used while formatting? I don't recognize it for formatting in dos? Is it part of the RunWait command like the " /c " ? RunWait(@ComSpec & " /C format " & $sDrive & " /Q /y")
JustSomeone Posted May 15, 2014 Posted May 15, 2014 (edited) I feel like an idiot asking this but why is the " /y " switch used while formatting? I don't recognize it for formatting in dos? Is it part of the RunWait command like the " /c " ? RunWait(@ComSpec & " /C format " & $sDrive & " /Q /y") This is there to avoid cmd window asking you dumb questions. /y can be read as "just format the ^*censored**&!@#&* card" EDIT: you can edit it and make it wait for another card, but i didnt make it like this to give you more time to change the card another edit : change $eFormat = 0 to 1 when you are triplesure you wont screw your harddrive or something imporant to you. Don't blame if you format the wrong drive. I've added an harmless msgbox reminding you what can happen if you do it wrong Edited May 15, 2014 by JustSomeone
copekyle Posted May 15, 2014 Author Posted May 15, 2014 haha... I saw the comment for $eFormat = 0 and appreciate you idiot proofing this just in case I was one of those people that executes code with out understanding exactly what it is doing. (I am not one of those people.) This will work for my application. Thanks
Exit Posted May 15, 2014 Posted May 15, 2014 (edited) #include <File.au3> HotKeySet("{ESC}", "_Exit") Func _Exit() Exit EndFunc ;==>_Exit Func _CloseWindow() If WinClose("[class:#32770]", "") = 1 Then AdlibUnRegister("_CloseWindow") EndFunc ;==>_CloseWindow While 1 $a1 = DriveGetDrive("REMOVABLE") For $i = 1 To $a1[0] If DriveStatus($a1[$i]) = "READY" Then $i = MsgBox(262144, Default, "Remove media from drive " & $a1[$i], 1) Next While 1 MsgBox(262144, Default, "Insert SD card to be formatted", 1) For $i = 1 To $a1[0] If DriveStatus($a1[$i]) = "READY" Then ExitLoop 2 Next WEnd $sDrive = $a1[$i] AdlibRegister("_CloseWindow", 100) If Not _FileCreate($sDrive & "\test.tmp") Then ExitLoop 0 * MsgBox(16 + 262144, Default, "Error creating temp file", 0) If Not FileDelete($sDrive & "\test.tmp") Then ExitLoop 0 * MsgBox(16 + 262144, Default, "Error deleting temp file", 0) RunWait(@ComSpec & " /c format " & $sDrive & " /Q /y || pause") ; pause is executed when format fails Beep(440, 200) ; ready to change SD cards WEnd With this code, there is no need to press any keys, ... just change the SD cards. When it beeps, just insert the next SD card. If format command fails, the command window will stay until you press any key. Edited May 16, 2014 by Exit App: Au3toCmd UDF: _SingleScript()
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