ybouan Posted April 26, 2005 Share Posted April 26, 2005 Use this to execute batch commands. expandcollapse popup; -------------------------------------------------------------------------------------------------- ; AutoIt Version: 3.0 ; Language: English ; ; Script Version: 1.0 ; Script Creation: 4/25/2005 ; Author: Yann Bouan for InhouseIT ; ; Script Function: ; Run Single or Multiple Batch Commands ; Usage: ; ITBatchRunner [-h][-p <directory>] [-f <file> [-s]] [command] ; ; -h Display help ; -p path using * as wildcard (defaults to working directory) ; -f file containing commands ; -s run a batch for each command ; ; Available variables $name, $prefix, $suffix ; ; Notes: ; Directories must be followed by a backslash ; Wildcards must all be on the same directory level ; To prevent lock ups all message boxes timeout ; ; Examples: (simple but of limited practical use) ; ITBatchRunner -p c:\myapplication\*\logs\ del $name.log ; ITBatchRunner -p c:\myapplication\logs\*.log copy $prefix.log $prefix.txt ; ITBatchRunner -p c:\myapplication\logs\*.log copy -f batch.bat ; -------------------------------------------------------------------------------------------------- ; -------------------------------------------------------------------------------------------------- ; Parse command line and launch appropriate batch(s) ; -------------------------------------------------------------------------------------------------- ; Returns: nothing Func Main () Dim $path = @WorkingDir Dim $command = '' For $i = 1 to $CmdLine[0] If $command = '' And $i+1 <= $CmdLine[0] Then Select ; Get path Case $CmdLine[$i] == '-p' If StringLeft($CmdLine[$i+1],1) = '-' Then MsgBox(0, 'Error', 'Bad path', 10) Else $path = $CmdLine[$i+1] $i = $i+1 ContinueLoop EndIf ; Get batch file Case $CmdLine[$i] == '-f' If FileExists ( $CmdLine[$i+1] ) Then If $i+2 <= $CmdLine[0] And $CmdLine[$i+2] = '-s' Then ; Execute multiple commands as individual batches ExecMulti ( $path, $CmdLine[$i+1] ) Else ; Execute multiple commands as single batch ExecBatch ( $path, $CmdLine[$i+1], 1 ) EndIf Exit Else MsgBox(0, 'Error', 'Command File does not exist', 10) Exit EndIf EndSelect EndIf ; Display help If StringLeft($CmdLine[$i],1) = '-' Then $helpMsg = ' Script Function:' & @CR $helpMsg = $helpMsg & ' Run Single or Multiple Batch Commands' & @CR $helpMsg = $helpMsg & 'Usage:' & @CR $helpMsg = $helpMsg & ' ITBatchRunner [-p <directory>] [-f <file> [-s]] [command]' & @CR & @CR $helpMsg = $helpMsg & ' -h display help' & @CR $helpMsg = $helpMsg & ' -p path using * as wildcard (defaults to working directory)' & @CR $helpMsg = $helpMsg & ' -f batch file containing commands' & @CR $helpMsg = $helpMsg & ' -s run a new batch for each command line' & @CR & @CR $helpMsg = $helpMsg & ' Available variables $name, $prefix, $suffix' & @CR & @CR $helpMsg = $helpMsg & 'Notes:' & @CR $helpMsg = $helpMsg & ' Directories must be followed by a backslash' & @CR $helpMsg = $helpMsg & ' Wildcards must all be on the same directory level' & @CR $helpMsg = $helpMsg & ' To prevent lock ups all message boxes timeout' & @CR & @CR $helpMsg = $helpMsg & ' Examples: (simple but of limited practical use)' & @CR $helpMsg = $helpMsg & ' ITBatchRunner -p c:\myapplication\*\logs\ del $name.log' & @CR $helpMsg = $helpMsg & ' ITBatchRunner -p c:\myapplication\logs\*.log copy $prefix.log $prefix.txt' & @CR & @CR $helpMsg = $helpMsg & ' ITBatchRunner -p c:\myapplication\logs\*.log copy -f batch.bat' & @CR & @CR $helpMsg = $helpMsg & ' ***** v1.0, made by InhouseIT (4/25/2005) ***** ' MsgBox(0, 'ITBatchRunner Help', $helpMsg , 15) Exit EndIf ; Build command $command = $command & ' ' & $CmdLine[$i] Next ; Execute single command as batch ExecBatch ( $path, $command ) EndFunc ; -------------------------------------------------------------------------------------------------- ; Cycle through commands - Execute multiple commands on one match or all matches ; -------------------------------------------------------------------------------------------------- ; Returns: nothing Func ExecMulti ($path, $commandfile, $matchName = '' ) $file = FileOpen( $commandfile, 0) ; Check if file opened for reading OK If $file = -1 Then MsgBox(0, "Error", "Unable to open file.") Exit ; Read in lines of command until the EOF is reached Else While 1 $command = FileReadLine($file) If @error = -1 Then ExitLoop Select Case $matchName = '' ; Execute Command on all matches ExecBatch ( $path, $command ) Case Else ; Execute command on single match ExecCommand ($path, $command, $matchName) EndSelect Wend FileClose($file) EndIf EndFunc ; -------------------------------------------------------------------------------------------------- ; Cycle through matches - Execute one or more command on every match ; -------------------------------------------------------------------------------------------------- ; Returns: nothing Func ExecBatch ( $path, $command, $multi = 0 ) $searchItems = StringSplit ( $path, '*') If $searchItems[0] > 1 And StringInStr( $searchItems[$searchItems[0]], "\") Then $searchPath = StringLeft( $path, StringLen($path) - StringLen( $searchItems[$searchItems[0]] ) + StringInStr( $searchItems[$searchItems[0]], "\")-1 ) Else $searchPath = $path EndIf ; Initiate directory scan $search = FileFindFirstFile ( $searchPath ) ; Exit if directory empty If $search = -1 Then MsgBox(0, 'Error', 'No files/directories matched the search pattern: ' & @CR & $searchPath, 10) Exit EndIf ; Cycle through directories While 1 $matchName = FileFindNextFile ( $search ) If @error Then ExitLoop If $matchName = '.' Or $matchName = '..' Then ContinueLoop EndIf $fullPath = $searchItems[1] & $matchName If $searchItems[0] > 1 And StringInStr($searchItems[$searchItems[0]],'\') Then $fullPath = $fullPath & $searchItems[$searchItems[0]] EndIf If FileExists( $fullPath ) Then ; Run command Select Case $multi = 1 ; Execute multiple commands on match ExecMulti ($fullPath, $command, $matchName) Case Else ; Execute single command on match ExecCommand ($fullPath, $command, $matchName) EndSelect EndIf WEnd EndFunc ; -------------------------------------------------------------------------------------------------- ; Prepare and run command ; -------------------------------------------------------------------------------------------------- ; Returns: nothing Func ExecCommand ( $fullPath, $command, $matchName ) $fullPath = StringLeft($fullPath, StringInStr($fullPath,'\',0,-1)-1) If FileExists( $fullPath ) Then $command = StringReplace ( $command, '$name', $matchName) $matchInfo = StringSplit($matchName, '.') $command = StringReplace ( $command, '$prefix', $matchInfo[1]) If $matchInfo[0] = 2 Then $command = StringReplace ( $command, '$suffix', $matchInfo[2]) Else $command = StringReplace ( $command, '$suffix', '') EndIf ; Run command RunWait( @ComSpec & ' /c ' & $command, $fullPath, @SW_HIDE) EndIf EndFunc Main() 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