Scripting
When FreeFileSync is run via the
command line,
the synchronization result is written to
standard output in
JSON format.
This output can be evaluated by scripts to customize functionality.
Windows: To view FreeFileSync's standard output, the pipe (
|) operator is required
because the operating system classifies FreeFileSync as a GUI application rather than a console application:
FreeFileSync.exe "D:\Backup Projects.ffs_batch" | more
The command prints JSON data such as:
{
"syncResult": "success",
→ can be: success, warning, error, cancelled
"startTime": "2026-01-05T12:35:42+00:00",
"totalTimeSec": 12,
"errors": 0,
"warnings": 0,
"totalItems": 1000,
"totalBytes": 1024,
"processedItems": 1000,
"processedBytes": 1024,
"logFile": "D:\\Logs\\Backup Projects 2026-01-05 123542.123.html"
}
Parsing sync result via PowerShell
Windows batch scripts (
.cmd/.bat) cannot parse JSON, so PowerShell can be used instead:
Example: Delete unnecessary log files
#run an .ffs_batch config and parse the JSON output
$data = & "C:\Program Files\FreeFileSync\FreeFileSync.exe" "D:\Backup Projects.ffs_batch" | ConvertFrom-Json
#delete the log file if no items were synced
if ($data.syncResult -eq "success" -and $data.totalItems -eq 0)
Remove-Item $data.logFile
Parsing sync result via Python
On Linux, the same task can be implemented using Python:
#!/usr/bin/env python3
import json, subprocess, os
#run an .ffs_batch config and parse the JSON output
result = subprocess.run(
["/opt/FreeFileSync/FreeFileSync", "/home/zenju/Backup Projects.ffs_batch"], stdout=subprocess.PIPE, text=True)
data = json.loads(result.stdout)
#delete the log file if no items were synced
if data["syncResult"] == "success" and data["totalItems"] == 0:
os.remove(data["logFile"])