I'm sure salmon Trout or one of the other more experienced batch folks can give a better solution than I.
The first issue is that no- when a program that doesn't support long file names (MS-DOS or 16-bit windows programs) writes back to the file, the long file name is not really preserved. There might be some very specific cases where it is- in particular, it depends if the program is writing to that file specifically, or deleting the existing file and recreating it. That was a common approach to saving files so it is much more common to find that the long name is basically removed altogether.
However, you can pretty easily workaround this with the batch. You can get the short name, run the program, wait for it to exit, and then afterwards you rename (move) the short named file to the original long name.
This has two batch files. One which is used to get the short file name, which I called getshort.bat:
@ECHO OFF
echo %~s1
and another to make use of it and run the program, which I've called runshort.bat:
@echo off
echo running program "%1" with shortened filename of "%2"
set fullname=%2
for /f %%p in ('getshort %2') do set shortfile=%%p
echo shortfilename is %shortfile%
start /wait %1 %shortfile%
move %shortfile% %fullname%
which is executed as runshort "C:\Program files (x86)\oldsoft\oldprogram.exe" "C:\Users\My User Account\Documents\Some Weird Folder\Unusually titled files\a study on the various kinds of birds which have nested within my beard.opd"
which will run the program with the short file name, and then afterwards rename that short name to the long name; if the program did nothing or rewrote the file properly, it will fail and do nothing, but if the program rewrote the file and the long name was lost, renaming the short name to the long name will effectively restore it.
The only caveat is that it might not have the same short file name afterwards, so MRUs within the old program might not function correctly.
Since I'm on 64-bit windows, there are short names, but I don't have any way to directly run older applications, so I can't directly test it with such a program.