Comecei a responder essa pergunta para dizer "Desculpe, mas não". Para minha surpresa, você pode! Não é muito bonito ou eficiente, mas você pode fazer isso.
Armazenar os argumentos normais para program.exe
em uma variável é simples. Isso funciona (que é apenas o seu exemplo, sem redirecionamento):
SET MYARGS=-parameter1 -parameter2 -parameter3
program.exe file1.txt %MYARGS%
O redirecionamento, no entanto, não é tratado como argumentos para o programa, mas como diretivas para o shell. Isso acontece antes da configuração ou expansão da variável, portanto, incluir o sufixo >> output.log
grava a saída no arquivo de log imediatamente.
Para que isso funcione, você precisa escapar da string de comando e iniciar um novo processo para cada chamada do seu programa.
SET MYARGS=-parameter1 -parameter2 -parameter3 -parameter4 ^^^>^^^> output.log
CMD.EXE /C program.exe file1.txt %MYARGS%
CMD.EXE /C program.exe file2.txt %MYARGS%
É claro que, se o nome ou a localização do seu arquivo de registro precisar ser alterado, isso ficará um pouco mais limpo:
SET LOGFILE=output.log
SET TOLOG=^^^>^^^> %LOGFILE%
SET MYCMD=-parameter1 -parameter2 -parameter3 -parameter4
CMD.EXE /C program.exe file1.txt %MYARGS% %TOLOG%
CMD.EXE /C program.exe file2.txt %MYARGS% %TOLOG%
Girar um intérprete de comando inteiro para cada chamada é um pouco pesado, mas talvez isso seja bom para sua situação. Se você tentar, eu estaria interessado em ver como isso afeta seus tempos de execução.
NOTA : Este truque tem pelo menos uma outra armadilha possível. As variáveis definidas no arquivo de lote não estarão disponíveis nas conchas CMD que você invocar. Você pode forçá-los a ser, mas isso é mais código e não parece necessário para o que você está fazendo.
Consulte Recursos ocultos dos arquivos em lote do Windows para obter o truque de escape ^
e muito mais.