1.

Solve : processing arguments in batch file?

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





Discussion

No Comment Found