File Command Center

FileOps

Rename in place with a real template language, and an undo that puts it all back.

Free right now — no account, no card

Get FileOps free Windows & Mac · one file, nothing to install

Preview

1 interface design, then a screenshot of it running. Drag, scroll or use the arrows.

Interface design FileOps, 1 of 1
Screenshot FileOps running on Windows today

Free while we’re in preview

Get FileOps

Rename in place with a real template language, and an undo that puts it all back.

The Mac button is for Apple Silicon. On an older Intel Mac, get this one instead.

One file, both ways. Double-click it for the window. Run the same file from a command prompt with arguments and it behaves as the command-line tool, because the engine is inside it. Nothing else to download and nothing to keep beside it.

Early preview. The window has been built and run, but not yet on a real Windows PC or Mac, so expect rough edges. The engine underneath it is fully tested.

  • One file — no installer
  • Runs on your machine, offline
  • Source code published below

Free while in preview. It isn’t signed yet, so Windows or macOS will ask you to confirm the first time you open it. At launch, FileOps is included in every plan along with the rest of the range.

Swaps come out right

Rename a to b and b to a in one batch and a naive tool destroys one of them. FileOps runs every batch in two phases: every source moves to a unique temporary name first, then every temporary moves to its destination. Arbitrary permutations and cycles of any length work, and a failure partway through rolls back what it already did.

Collisions abort the whole run

If two files would land on the same name, or a destination already exists on disk and isn’t itself being renamed away, FileOps reports every collision and renames nothing. Not even the files that were perfectly fine. There is no --force. A half-renamed directory is far worse than one that didn’t change.

The template language

--match is a Go regex against the filename. --to builds the new name from {1}, {name}, {ext}, {n}, {date} and {size}, with {upper:}, {lower:} and {title:} that nest and compose. Processing order is sorted and stable, so {n} means the same thing on every machine and the plan you previewed yesterday is the plan that runs today.

Files never leave their directory, and nothing is deleted or overwritten. Reorganising files into folders is FolderForge’s job.

Reading on the job itself

Advanced & technical details Command-line builds, source code, checksums and a recorded session — for developers and IT teams

A working CLI prototype of the bulk-rename engine: a real template language (regex capture groups, counters, case transforms, date and size tokens), all-or-nothing collision safety so a clashing batch renames nothing at all, and a journal that reverses the entire operation. Verified: a mixed batch aborted without moving one file, and undo restored every path and hash exactly. EXIF/ID3 tokens and content find-and-replace are on the roadmap.

Recorded session

Recorded terminal session showing FileOps running
A real recorded session — FileOps’s actual output, captured by running the shipped binary.

Naming status

Working name only — brand verdict **AVOID** (Very High). Collision: FileOps. Rename completely.

What it draws on

Existing paid software whose best ideas shaped this program: Directory Opus, Listary Pro, Duplicate Cleaner Pro, Advanced Renamer Commercial.

Command line

There is nothing extra to install. The program you download is the command-line tool as well: give it arguments instead of double-clicking it and it runs as one, with its output on your terminal. The standalone builds below are the same engine on its own, for machines where you would rather not ship a window at all.

fileops 1.0.0 - bulk rename engine with collision safety and undo

USAGE
  fileops rename  <dir> --match <regex> --to <template> [options]
  fileops preview <dir> --match <regex> --to <template> [options]
  fileops undo    --journal <file> [--apply] [--json]
  fileops help

COMMANDS
  rename    Plan renames; DRY RUN unless --apply is given.
  preview   Always read-only. Never touches the filesystem.
  undo      Reverse every rename recorded in a journal, newest first.
            DRY RUN unless --apply is given.

OPTIONS
  --match <regex>   Go regular expression matched against the FILE NAME.
  --to <template>   Destination name template (see TEMPLATE TOKENS).
  --recursive       Descend into subdirectories. Files are renamed in place;
                    directories themselves are never renamed.
  --start <N>       First value of the {n} counter (default 1).
  --pad <N>         Zero-pad {n} to N digits (default 0, no padding).
  --apply           Actually perform the renames. Without it, nothing changes.
  --journal <file>  Write (rename) or read (undo) the JSON undo journal.
  --json            Emit machine-readable JSON on stdout.
  -h, --help        Show this help and exit 0.

TEMPLATE TOKENS
  {1} {2} ...       Regex capture groups ({0} is the whole match).
  {name}            Original file name without its extension.
  {ext}             Extension including the leading dot ("" if none).
  {n}               Sequence counter, honours --start and --pad.
  {date}            File mtime formatted YYYY-MM-DD.
  {size}            File size in bytes.
  {upper:X}         Uppercase whatever X renders to.
  {lower:X}         Lowercase whatever X renders to.
  {title:X}         Title-case whatever X renders to.
                    Transforms nest, e.g. {upper:{name}}-{n}{ext}

SAFETY
  Files are visited in a deterministic sorted order, so {n} is reproducible.
...

Recorded from the shipped binary, not written by hand.

Source

Every file the program is built from:

console.go · console_test.go · guided.go · main.go

SHA-256 checksums · build instructions & scope notes · full build plan