For simple tasks you can use the unconditional and the conditional command execution of the CMD.EXE.
┌──────────────────────────────┬──────────────────────────────┐ │Command separator │Meaning │ ├──────────────────────────────┼──────────────────────────────┤ │command1 & command2 │Execute command1; execute │ │ │command2 regardless of the │ │ │exit code of command1 │ ├──────────────────────────────┼──────────────────────────────┤ │command1 && command2 │Execute command1; execute │ │ │command2 only if the exit code│ │ │of command1 is 0. │ ├──────────────────────────────┼──────────────────────────────┤ │command1 | command2 │Execute command1 and command2;│ │ │pipe STDOUT of command1 into │ │ │STDIN of command2 (see Using │ │ │PIPEs and Pipes & Errorlevel) │ ├──────────────────────────────┼──────────────────────────────┤ │command1 || command2 │Execute command1; execute │ │ │command2 only if the exit code│ │ │of command1 is NOT 0 │ └──────────────────────────────┴──────────────────────────────┘
Note: command1 and command1 can be an internal or external OS/2 command or two or more commands separated with one of the separators. Using parenthesis to group the commands is also possible. (constructions like
(c1 && c2) || ( c3 && c4 || c5)
are possible)
Examples:
@ECHO OFF REM *** Some examples for conditional command execution REM REM Note: This commands only work in Batch programs! REM (because of the format used for the placeholder) REM REM ------------------------------------------------------------------ REM *** copy all files in the current directory into the directory REM .\backup and print a success message for every file REM succesfully copied REM @ECHO OFF for %%d in ( *.* ) DO ( @copy %%d backup\*.* 2>NUL >NUL && ECHO. %%d saved. ) REM ------------------------------------------------------------------ REM *** copy all files in the current directory into the directory REM .\backup and print an error message for every file REM that couldn't be copied REM @ECHO OFF for %%d in ( *.* ) DO ( @copy %%d backup\*.* 2>NUL >NUL || ECHO. Error copying %%d! ) REM ------------------------------------------------------------------ REM *** copy all files in the current directory into the directory REM .\backup and print a success or an error message for each REM file depending on the success of the copy command REM @ECHO OFF for %%d in ( *.* ) do ( ( copy %%d backup\*.* 2>NUL >NUL && ECHO. %%d saved. ) || ECHO. Error saving %%d ) REM ------------------------------------------------------------------ REM *** create a directory named BACKUP in the current directory, REM copy all files in the current directory into the directory REM .\BACKUP, delete all files succesfully copied and REM print a success or an error message for each file REM depending on the success of the copy and del commands REM REM Note: Be aware that OS/2 starts a new CMD.EXE for each REM command string in parenthesises! REM REM Note: Maybe you must read it more than one time to REM understand what's going on. REM (or look at the REXX program doing the same) REM @ECHO OFF ECHO. ECHO. Saving the files *.* into the directory .\backup md .\backup 2>NUL >NUL & cd .\backup && ( cd .. & for %%d in ( *.* ) do ( copy %%d backup\*.* 2>NUL >NUL && ( del %%d 2>NUL >NUL && ( ECHO. --- %%d saved and deleted. ) || ( ECHO. -W- %%d saved but not deleted. ) ) || ( ECHO. -E- Error saving %%d ) ) ) || ( ECHO. -E- Error accessing the directory .\backup! ) ECHO.
Note: Keep in mind that the maximum line length handled by the CMD.EXE is 1024!