Conditioning launchd scheduled job on file existence?
Short answer: Nope.
launchd can start jobs at scheduled times (with the StartCalendarInterval key), when particular files are modified (WatchPaths), or when files appear in a particular directory (QueueDirectories), but it doesn't have a way to test existence of a specific file, nor to combine conditions the way you want to.
So... something like a bash wrapper is what you're looking at. You can either write a bash script and run that with a StartCalendarInterval trigger, or use the ProgramArguments array to embed a miniature script directly in the plist:
&lt;key&gt;ProgramArguments&lt;/key&gt;
&lt;array&gt;
    &lt;string&gt;/bin/bash&lt;/string&gt;
    &lt;string&gt;-c&lt;/string&gt;
    &lt;string&gt;[[ -e /etc/this_file_must_exist ]] &amp;&amp; [[ ! -e /etc/skip_if_this_exists ]] &amp;&amp; exec /path/to/my_job&lt;/string&gt;
&lt;/array&gt;

Note: I'd recommend running your job from bash with exec; that makes the job replace the shell (rather than running as a subprocess), so launchd can monitor and manage it more directly.