Я начал отвечать на этот вопрос, чтобы сказать: «Извините, но нет». К моему удивлению, вы можете! Это не очень красиво или эффективно, но вы можете сделать это.
Сохранить обычные аргументы для program.exe
в переменной просто. Это работает (это только ваш пример, без перенаправления):
SET MYARGS=-parameter1 -parameter2 -parameter3
program.exe file1.txt %MYARGS%
Перенаправление, тем не менее, обрабатывается не как аргументы программы, а как директивы для оболочки. Это происходит перед установкой или расширением переменной, поэтому включение суффикса >> output.log
записывает вывод в файл журнала.
Чтобы заставить это работать, вы должны экранировать командную строку и запускать новый процесс для каждого вызова вашей программы.
SET MYARGS=-parameter1 -parameter2 -parameter3 -parameter4 ^^^>^^^> output.log
CMD.EXE /C program.exe file1.txt %MYARGS%
CMD.EXE /C program.exe file2.txt %MYARGS%
Конечно, если имя или местоположение вашего файла журнала когда-либо нужно будет изменить, этот способ делает его немного чище:
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%
Раскручивать целый командный интерпретатор для каждого вызова немного тяжело, но, возможно, это нормально для вашей ситуации. Если вы попробуете это, мне будет интересно посмотреть, как это повлияет на ваше время выполнения.
ПРИМЕЧАНИЕ . У этого трюка есть как минимум еще одна возможная ловушка. Переменные, заданные вами в командном файле, не будут доступны в оболочках CMD, которые вы вызываете. Вы можете заставить их быть, но это больше кода, и не выглядело необходимым для того, что вы делаете.
См. Скрытые возможности пакетных файлов Windows для уловки ^
escape и многое другое.