|
Answer» processing ARGUMENTS in batch file
Hi all, I'm playing with this a bit now and I have come up with this so far!
::Script that processes arguments ::If you don't have Notepad++ or something like that this could be really hard to read through :: @ECHO OFF :: Make variables local and clear unwanted variables SETLOCAL :: Create variables that comments out parts in script SET ##=:: SET ###= :: Save the script filename value to variable SET SCRIPTNAME=%~nx0 SET HELP= SET PRINTVAR= :: Set default value for %COMMAND% SET COMMAND=test_Robocopy SET NETUSE= SET logfile= SET eMail= GOTO :MAIN
:LOOPARGS %##% :LOOPARGS START IF NOT "%1"=="" ( SET x=%1 ) ELSE (( SET HELP=:HELP)&(GOTO :EOF)) IF "%1"=="debug" ( SET PRINTVAR=:PRINTVAR & SET ##=ECHO .) IF "%x:~0,6%"=="email:" ( IF DEFINED eMail (SET eMail=%x:~6%,%eMail%) ELSE (SET eMail=%x:~6%) ) IF "%X:~0,8%"=="logfile:" SET logfile=%x:~8% & SET ROBOLOGFILE=/LOG:%logfile% IF "%x:~0,7%"=="source:" SET SOURCE=%x:~7% IF "%x:~0,5%"=="dest:" SET DESTINATION=%x:~5% IF "%x:~0,9%"=="source_u:" SET SOURCE_U=/USER:%x:~9% & SET NETUSE=:NETUSE IF "%x:~0,9%"=="source_p:" SET SOURCE_P=%x:~9% & SET NETUSE=:NETUSE IF "%x:~0,7%"=="dest_u:" SET DESTINATION_U=/USER:%x:~7% & SET NETUSE=:NETUSE IF "%x:~0,7%"=="dest_p:" SET DESTINATION_P=%x:~7% & SET NETUSE=:NETUSE IF "%x:~0,8%"=="command:" SET COMMAND=%x:~8% IF "%1"=="/help" SET HELP=:HELP IF "%1"=="help" SET HELP=:HELP IF "%1"=="/?" SET HELP=:HELP IF "%1"=="--help" SET HELP=:HELP IF NOT "%2"=="" SHIFT & GOTO :LOOPARGS %##% :LOOPARGS END GOTO :EOF
:NETUSE %##%:NETUSE START :: Check if Source is network path IF "%SOURCE:~0,2%"=="\\" NET USE %SOURCE% %SOURCE_U% %SOURCE_P% || IF DEFINED logfile ECHO connecting to %SOURCE% faild>>%logfile% :: Check if Destination is network path IF "%DESTINATION:~0,2%"=="\\" NET USE %DESTINATION% %DESTINATION_U% %DESTINATION_P% || IF DEFINED logfile ECHO connecting to %DESTINATION% faild >>%logfile% %##%:NETUSE END GOTO :EOF
:eMail %##%:eMail START ECHO Sending email to %eMail% %##%:eMail END GOTO :EOF
:PRINTVAR %##%:PRINTVAR START IF DEFINED eMail ECHO email:%eMail% IF DEFINED logfile ECHO logfile:%logfile% IF DEFINED SOURCE ECHO source:%SOURCE% IF DEFINED DESTINATION ECHO dest:%DESTINATION% IF DEFINED SOURCE_U ECHO source_u:%SOURCE_U% IF DEFINED DESTINATION_U ECHO dest_u:%DESTINATION_U% IF DEFINED SOURCE_P ECHO source_p:%SOURCE_P% IF DEFINED DESTINATION_P ECHO dest_p:%DESTINATION_P% IF DEFINED COMMAND ECHO command:%COMMAND% %##%:PRINTVAR END GOTO :EOF
:HELP %##%:HELP START ECHO.Processes arguments in batch-script ECHO.%SCRIPTNAME% [arguments] ECHO.email:[email:[emailprotected]] [email:[emailprotected] email:[emailprotected]] ECHO.Includes emailaddress to report to. You can have more than one ECHO.logfile:[logfile:%temp%\%~n0.log] ECHO.Includes logfile to print to ECHO.source:[source:\\computername\share] [%temp%\tempfolder1] ECHO.Files to work with ECHO.dest:[dest:\\computername\share] [%temp%\tempfolder2] ECHO.Destination to put files in ECHO.source_u:[source_u:admin] ECHO.Username for remote share ECHO.source_p:[source_p:adminpassword] ECHO.Password for remote share ECHO.dest_u:[dest_u:admin] ECHO.Username for remote share ECHO.dest_p:[dest_p:adminpassword] ECHO.Password for remote share ECHO.command:[command:echo] [command:robocopy] ECHO.The command you WANT! does the following: "command" "source" "destination" "/LOG:logfile" ECHO.Default is test_Robocopy ECHO.debug[debug] ECHO.Prints out variables and locations in script SET ###=:: %##%:HELP END GOTO :EOF
:MAIN %##%:MAIN START :: Call :LOOPARGS procedure and process arguments CALL :LOOPARGS %* :: If source or destination neads password call procedure :NETUSE IF DEFINED NETUSE CALL %NETUSE% :: If argument "printvar" was GIVEN call procedure :PRINTVAR IF DEFINED PRINTVAR CALL %PRINTVAR% :: If help is needed call procedure :HELP IF DEFINED HELP CALL %HELP% :: Execute command in new environment replace "CMD /C" with "START" to start separate shell %###% CMD /C "%COMMAND% %SOURCE% %DESTINATION% >>%LOGFILE%" :: If any email address was given then call procedure :eMail IF DEFINED eMail CALL :eMail
%##%:MAIN END. THIS IS THE END OF %SCRIPTNAME% :: Erase local variables and exit ENDLOCAL
|