You may create your Batch "file" as a long string with lines terminated in \n
, exactly as you shown in your example, and then execute that string (I called it a "NotBatch-text") executing cmd.exe and redirecting such string into its Stdin standard handle. This way, your "NotBatch-text" may use a large number of Batch features, like expansion of %variables%, IF
and FOR
commands nested at any level, and many more. You may also use delayed !variable! expansion if you execute cmd.exe with /V:ON
switch. Really, the only things that don't works in the NotBatch-text are: parameters and SHIFT
command, and GOTO
/CALL :label
commands; further details at this post.
If you want to execute a more advanced "NotBatch-text" string, you may even simulate GOTO
and CALL :label
commands with the aid of a third party program, as described at this post.