For your typical self-submitting batch job the big thing is to at least strip of the version before the resubmit to pick up the then-current version. Here an example using F$ELEMENT (sooo much easier than F$PARSE :-).
$ redo = "submit/log/noprint/noti/queue=" + -
f$getqui("DISPLAY_QUEUE","QUEUE_NAME","*","THIS_JOB")
$ restart = "tomorrow + 07:00:00" ! First daily run, Alter as needed.
$ if time.lts."12:00" then restart = "17:00:00" ! Second daily run, Alter as needed.
$ redo /after="''restart'"/para=("''p1'","''p2'","''p3'") 'f$elem(0,";",f$environment("procedure"))
Next, as submitter/changer of the command file you decide whether the already scheduled next run is to use the new version or the then current version WHICH IS REMEMBERED THROUGH THE FILE-ID, not its name.
If you want to start using the new version immediately, just use
$ COPY /OVER my-script.com ;-1 /LOG
%COPY-I-OVERLAY, MY-SCRIPT.COM;35 being overwritten
%COPY-S-COPIED, MY-SCRIPT.COM;36 copied to MY-SCRIPT.COM;35 (5 blocks)
Cheers,
Hein