Jump to content

This site uses cookies. By continuing to browse the site you are agreeing to our use of cookies. Find out more here. X
X


Photo

Batch execute commands


  • Please log in to reply
No replies to this topic

#1 ybouan

ybouan

    Seeker

  • Active Members
  • 16 posts

Posted 26 April 2005 - 11:11 PM

Use this to execute batch commands.

Plain Text         
; -------------------------------------------------------------------------------------------------- ; 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()











0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users