Drive TextMerger entirely from a script or a scheduled task - no GUI session needed.
Download free trialBuy TextMerger
TextMerger can run a saved task, or merge files directly without creating one. On Windows run TextMerger.exe from its install folder; on Linux and macOS run TextMergerCmd. The GUI can also write a .bat / .sh file for a saved task, and every flag below can be added to it.
TextMerger task="C:\tasks\merge.tmt" logfile="C:\tasks\merge.log"
TextMerger C:\tasks\merge.tmt (same as task=)
On Linux / macOS, replace TextMerger with TextMergerCmd.
Give the source files in the order you want them joined, and the output file:
TextMerger merge --from="C:\logs\mon.txt,C:\logs\tue.txt" --to="C:\out\week.txt"
Keep the header of the first file only (for CSV / TSV where every file repeats it), and append a new line between files that do not end with one:
TextMerger merge --from="jan.csv,feb.csv,mar.csv" --to="q1.csv" --keep-header
TextMerger merge --from="a.log,b.log" --to="all.log" --newline
Options: --from=FILE[,FILE...], --to=FILE, --keep-header (alias --keep-first-header-only), --newline (alias --new-line, --add-newline).
TextMerger task="merge.tmt" --set=Merge.DestFile="D:\out\merged.txt"
TextMerger task="merge.tmt" --set=Merge.KeepFirstHeaderOnly=1
TextMerger merge --from="logs\a.txt,logs\b.txt" --to="all.txt" --var=DAY=2026-10-04
In any task value you can use ${today}, ${yesterday}, ${tomorrow}, ${now}, ${env:NAME}, ${var:NAME} (or ${NAME}) and ${session_dir}. A variable may hold a comma-separated list for --from:
TextMerger merge --from="${var:FILES}" --to="${var:OUT}" --var-file=vars.ini
# vars.ini:
# FILES=C:\logs\mon.txt,C:\logs\tue.txt
# OUT=C:\out\week.txt
Variables are also available in every value of a saved .tmt task, so the same task can run on different days or machines. Define them with --var=NAME=VALUE (repeatable) or --var-file=FILE (one NAME=VALUE per line).
TextMerger schema [--json] list the known task keys
TextMerger init print a commented task template
TextMerger describe task="merge.tmt" [--json] describe an existing task
TextMerger capabilities [--json] list the commands
TextMerger schedule --session="merge.tmt" --daily=02:30 [--install]
TextMerger pipeline --file=tasks.ini [--json] run several tasks in one go
TextMerger mcp run an MCP server on stdio (for AI agents)
schedule prints a ready-to-paste schtasks line on Windows or a crontab line on Linux / macOS; add --install to register it. Exit codes: 0 success, 1 usage or run error, 3 task execution failed, 4 task file missing or invalid.
pipeline runs a list of steps in order and writes one summary report - handy to chain merges, conversions and database exports in a single scheduled command. Run TextMerger pipeline with no file to print a ready-to-copy template.
TextMerger pipeline --file=tasks.ini logfile=pipeline.log
; tasks.ini
[Pipeline]
Report=C:\logs\report.txt
[Step1]
Name=Merge logs
Args=merge --from="C:\logs\mon.txt,C:\logs\tue.txt" --to="C:\out\week.txt" logfile=step1.log
[Step2]
Name=Merge headers away
Args=merge --from="C:\out\week.txt,C:\out\extra.txt" --to="C:\out\all.txt" --keep-header logfile=step2.log
A step's App= can name another application (installed next to this one, in its own install folder, or on PATH); leave it out to use TextMerger. If a required application is missing the whole run stops with exit code 5 - mark such a step Optional=1 to skip it instead.
See the Automation & pipelines guide for the full format.
TextMerger merge --from="a.txt,b.txt" --to="out.txt" --quiet
TextMerger merge --from="a.txt,b.txt" --to="out.txt" --verbose
TextMerger merge --from="a.txt,b.txt" --to="out.txt" --log-level=warning
Without logfile= nothing is written to disk; add logfile="run.log" to keep a record for a scheduled run.