A Total Commander File System plugin (WFX) that brings the PowerToys New+ workflow to Total Commander: create new files and folders from a personal template collection, with date/time variables in the names substituted at creation time.
The plugin exposes a read-only virtual file system — \\\TCNewPlus — that
lists the contents of your templates folder. Every name is shown the way
New+ would create it: sorting prefixes (leading digits, spaces and dots)
are hidden, and variables like $YYYY-$MM-$DD or %USERNAME% are already
replaced with the current values. To create a new file or folder from a
template, simply copy it out with F5 into the directory shown in the
other panel — the copy is created under the substituted name, with fresh
timestamps, exactly as if New+ had created it.
Anything works as a template: plain text files, Office documents, entire project folder structures. Templates are ordinary files in an ordinary folder — the same folder PowerToys New+ uses, if you want to share one collection between Explorer's context menu and Total Commander.
Beyond New+: as an optional extension that PowerToys New+ does not offer, TCNewPlus can also substitute variables inside file contents (not just in names) for chosen file extensions — see Variable Expansion Inside File Contents. It is off by default, so the plugin stays a faithful New+ equivalent until you opt in.
Project page: https://github.com/michal-ruzicka/TCNewPlus — source code, releases and issue tracker.
Binary releases: https://github.com/michal-ruzicka/TCNewPlus/releases
Support: If you find this plugin useful, consider supporting its development.
-
https://github.com/sponsors/michal-ruzicka — GitHub Sponsors (GitHub account needed).
-
https://ko-fi.com/michal_ruzicka — Buy me a Coffee with no specific account needed, card payment is possible.
-
https://revolut.me/ruzicka_michal — Donate me via Revolut, debet/credit card or Apple Pay.
The recommended way is the Total Commander auto-installer:
- Download
TCNewPlus.vX.Y.Z.zipfrom the latest release. - In Total Commander, navigate to the ZIP file and press Enter.
- TC detects the bundled
pluginst.infand asks whether to install the plugin — confirm. - Open Network Neighborhood (
\\\in the command line, or the\drive button → Network) and enter TCNewPlus to verify.
If you prefer to install manually, unzip the archive into a persistent
folder (for example C:\Tools\TCNewPlus\) and add TCNewPlus.wfx
(32-bit TC) or TCNewPlus.wfx64 (64-bit TC) under Configuration →
Options → Plugins → File system plugins → Configure → Add.
Each release ZIP is accompanied by a detached GPG signature file
(TCNewPlus.vX.Y.Z.zip.asc). Before installing, verify that the
archive has not been tampered with:
gpg --keyserver keys.openpgp.org --recv-keys 489C5EC80FD62BE89E59B4F719C13E8CE0F5DB61
gpg --verify TCNewPlus.vX.Y.Z.zip.asc TCNewPlus.vX.Y.Z.zip
GPG should report Good signature from "Michal Růžička <ruzicka.mich@gmail.com>".
The full fingerprint of the signing key is 489C 5EC8 0FD6 2BE8 9E59 B4F7 19C1 3E8C E0F5 DB61.
Every release is built from a pinned, identical toolchain, so the same source code always produces byte-for-byte identical binaries. This means you are not just trusting the GPG signature — you can independently confirm that the published binary matches the published source code by building it yourself and comparing the SHA-256 of the ZIP against the released ZIP archive or the CI build log for the release commit.
Full details — how the build achieves this, and how to run a verification build yourself — are in Reproducible Builds in the developer documentation.
- Open the plugin in one panel: type
cd \\\TCNewPlusin the command line, or navigate to Network Neighborhood → TCNewPlus. - Open the destination folder (where the new file should be created) in the other panel.
- Select a template and press F5 (Copy), then confirm.
The new file or folder appears in the destination under the name shown in the plugin panel — variables already substituted, sorting prefix already removed — with fresh creation timestamps. Folder templates are copied recursively, including variable substitution in the names of the files inside them.
A small sample template set ships with the plugin so the panel is not empty on first use; replace it with your own templates or point the plugin at your PowerToys New+ folder (see Configuration).
Each entry shows the shell icon of the file type it will create (a .docx
template the Word icon, a folder template a folder icon, …), and the plugin
itself appears with its own icon in Network Neighborhood.
Pressing Enter or F3 on a template opens a temporary copy for inspection. Alt+Enter shows which real file on disk a virtual entry comes from. The panel is read-only: creating, renaming and deleting templates is intentionally not possible through the virtual file system — manage the templates folder directly on disk instead (it is an ordinary folder), then refresh the panel with Ctrl+R.
Templates live in an ordinary folder on disk (see Configuration for its location). Anything in that folder becomes a template: files, folders (copied recursively), shortcuts. Two naming conventions — the same ones PowerToys New+ uses — control how templates appear:
- Sorting prefix. Leading digits, spaces and dots order the templates
without appearing in the created files:
1. Letter.docx,2. Invoice.xlsx,10. Report.pptx. The prefix is stripped from the displayed (and created) name. - Variables. Anywhere in the name, the patterns below are replaced with current values at listing/creation time.
Case-sensitive, identical to the patterns New+ and PowerRename use:
| Variable | Explanation |
|---|---|
$YYYY |
Year, full four digits |
$YY |
Year, last two digits (zero-padded) |
$Y |
Year, last digit |
$MMMM |
Name of the month |
$MMM |
Abbreviated name of the month |
$MM |
Month, zero-padded |
$M |
Month, no padding |
$DDDD |
Name of the day of the week |
$DDD |
Abbreviated name of the day of the week |
$DD |
Day of the month, zero-padded |
$D |
Day of the month, no padding |
$hh |
Hours, zero-padded |
$h |
Hours, no padding |
$mm |
Minutes, zero-padded |
$m |
Minutes, no padding |
$ss |
Seconds, zero-padded |
$s |
Seconds, no padding |
$fff |
Milliseconds, three digits |
$ff |
Milliseconds, first two digits |
$f |
Milliseconds, first digit |
| Variable | Explanation |
|---|---|
$PARENT_FOLDER_NAME |
The (already substituted) name of the parent template folder. Only works in files inside template subfolders, matching New+ behaviour. |
Each %environment_variable% (case-insensitive) is replaced with its
value — %USERNAME%, %USERDOMAIN%, %COMPUTERNAME%, …
Any filesystem-invalid characters (\ / : * ? " < > |) in substituted
values are replaced with spaces, exactly as New+ does.
A template file named
1. Meeting Notes $YYYY-$MM-$DD $hh.$mm by %USERNAME%.md
appears in the panel — and is created on F5 — as
Meeting Notes 2026-06-13 14.30 by michal.md
Settings live in TCNewPlus.ini. The plugin reads it from two locations
and uses the first one that exists — values are not merged across
files:
%APPDATA%\GHISLER\TCNewPlus.ini— per-user override<plugin install dir>\TCNewPlus.ini— system-wide default, shipped with the plugin
The shipped INI has every option commented out, so all defaults apply. To
customise just for your user account, copy that file to
%APPDATA%\GHISLER\TCNewPlus.ini and edit the copy; the system-wide file
is then ignored entirely. The chosen file is re-read on every listing of
the plugin root — edits take effect on the next refresh (Ctrl+R).
Environment variables (%LocalAppData%, %UserProfile%, …) are expanded
in any value. The INI is read as UTF-8 (a UTF-8 or UTF-16 byte-order
mark is also honoured), so paths with accented or other non-ASCII
characters work — just save the file as UTF-8 (the default in most editors).
| Section | Key | Default | Meaning |
|---|---|---|---|
[Templates] |
TemplatesPath |
Templates folder next to the plugin DLL |
Folder whose contents appear as templates |
[Templates] |
ShowLinkToTemplatesDir |
(empty) | Label for an extra entry that opens the real templates folder (see below) |
[Templates] |
SetTimestampsToCurrentTime |
0 |
Show the current time as the entries' timestamps instead of the template files' real ones |
[Templates] |
UseTimestampsToIndicateOrdering |
0 |
Step the displayed times by the prefix order so sorting by modification time reproduces it (see below) |
[FileNames] |
ReplaceFilenameVariables |
1 |
Substitute the variables described above in names |
[FileNames] |
HideStartingDigits |
1 |
Strip the sorting prefix (leading digits, spaces, dots) |
[FileContents] |
ReplaceContentVariables |
(empty) | Comma-separated extensions whose file contents also get variables expanded (see below) |
The default templates folder is always the Templates folder next to the
plugin DLL, even when the per-user INI is in effect — that is where the
bundled sample set physically lives. Set TemplatesPath to point
elsewhere.
To share one template collection with PowerToys New+, point the plugin at the New+ templates folder:
[Templates]
TemplatesPath=%LocalAppData%\Microsoft\PowerToys\NewPlus\TemplatesLike the Open templates folder item in the PowerToys New+ menu, the plugin
can show an extra entry in \\\TCNewPlus that takes you straight to the real
folder your templates live in. Set ShowLinkToTemplatesDir (under
[Templates]) to the label you want that entry to have:
[Templates]
ShowLinkToTemplatesDir=0. Open templates folderPressing Enter on the entry switches the panel to the actual templates
folder on disk (whatever TemplatesPath resolves to). The label follows the
same naming rules as templates — variables are expanded and the sorting
prefix is hidden per HideStartingDigits, so the 0. above just sorts it to
the top when prefixes are kept. The label must be a valid file name (no
\ / : * ? " < > |); an empty or invalid value (the default) shows no link.
The entry is a shortcut, not a browsable folder: use Enter to follow it. Operations that open a folder without "executing" it (for example "open in a new tab") do not follow the shortcut — they simply do nothing, because there is no virtual folder to descend into.
By default each entry in \\\TCNewPlus shows the created / modified /
accessed times of the physical template behind it. Set
SetTimestampsToCurrentTime=1 (under [Templates]) to show the current
time on every entry instead — consistent with the date and time substituted
into names and contents:
[Templates]
SetTimestampsToCurrentTime=1A file you create by copying a template out (F5) carries the same
timestamps it is shown with in the panel: the current time when this option
is on, or the template file's own times when it is off (the default).
A file-system plugin cannot impose its own sort order on Total Commander's
panel, so the New+ prefix order (1. , 2. , …) is normally lost once the
prefixes are hidden. UseTimestampsToIndicateOrdering=1 works around this:
[Templates]
UseTimestampsToIndicateOrdering=1It implies SetTimestampsToCurrentTime=1 and additionally sets each entry's
displayed modification time one second earlier than the previous one, in
the order the templates sort by their real name (with the prefix — the
same order the PowerToys New+ menu uses). Sort the \\\TCNewPlus panel by
modification time (descending) and the entries line up in your intended
order. The stepping restarts in every subfolder and includes the
ShowLinkToTemplatesDir entry.
Times are only ever stepped backwards (never into the future), and the
steps affect the display only. Variable substitution in names and
contents uses the listing snapshot, while the timestamps written to a
copied-out file follow SetTimestampsToCurrentTime — so with that option off
(the default), a file you create keeps the template's real times even
though the panel shows the stepped ordering times. (If you keep folder
templates, turn off TC's Sort directories separately option so folders take
part in the time ordering.)
Extension beyond PowerToys New+. This feature does not exist in PowerToys New+, which only substitutes variables in filenames. In-content expansion is a TCNewPlus-only addition; templates that rely on it will not behave the same way in the New+ Explorer menu.
TCNewPlus can additionally expand the same variables inside the file contents when a template is copied out — so a Markdown template can fill in today's date, the user name, or the project folder name in its body.
Because expanding variables inside a binary file would corrupt it, this is
off by default and opt-in per file extension — the plugin never
tries to guess whether a file is text. List the extensions to expand in
ReplaceContentVariables:
[FileContents]
ReplaceContentVariables=.md,.txtWith the above, copying a .md or .txt template runs its contents
through the same substitution as the names — except that characters
invalid in filenames are not replaced with spaces inside content (a
path from %USERPROFILE% keeps its : and \). $PARENT_FOLDER_NAME
expands to the name of the containing template subfolder. Files of any
other extension are copied byte for byte.
The date, time and environment-variable values are captured the moment the
folder is listed (refresh with Ctrl+R), and the same snapshot is
reused when you copy the file out — so a $ss or a %VAR% resolves to the
identical value in the file's name and in its contents, even if the clock
ticks or a system variable changes between the listing and the copy.
Listed files are assumed to be UTF-8 (a leading byte-order mark is preserved). A file that turns out not to be valid UTF-8 is copied verbatim rather than risk corrupting it.
A keyboard shortcut that opens the templates in a new tab in the other panel
can be defined in the Configuration → Options → Misc. menu. This example
uses Ctrl+N, as can be seen in the following image.
The hotkey calls the custom command em_tcnewplus, which can be configured in
the usercmd.ini file as shown in the next image.
Its definition is as follows:
- Command:
%COMMANDER_EXE%— calls Total Commander itself. - Parameters:
/O /T /S /R="\\\TCNewPlus\"— opens\\\TCNewPlus\in a new tab in the other panel of the running TC instance. - Icon file:
C:\Program Files\Total Commander\plugins\wfx\TCNewPlus\TCNewPlus.wfx64— uses the TCNewPlus icon. Adjust the path if your plugin installation directory differs. - Tooltip: optional — use any description you find useful.
A toolbar button can be added the same way, as shown in the next picture.
The plugin reimplements the New+ naming rules on top of Total Commander's file-system-plugin model, which leads to a few deliberate differences:
- File extensions are never hidden. New+ can hide extensions in its menu because the menu is only a launcher; in Total Commander the displayed name is the name the copy gets, and a file without its extension would be broken. (TC's own "hide extension" display options still apply to the panel like for any other file system.)
- Sorting is up to Total Commander. With
HideStartingDigits=1(the default) the prefixes that order the New+ menu are stripped before TC sorts the panel, so templates appear in alphabetical order of their visible names. SetHideStartingDigits=0to sort by prefix at the cost of the prefix ending up in the created files. - Names are substituted at listing time. The timestamp in a displayed name is taken when the panel is listed, not when the copy starts. Refresh with Ctrl+R to re-substitute with the current time.
- Variable replacement defaults to on. New+ ships with Replace
variables in template filename disabled; this plugin enables it by
default (set
ReplaceFilenameVariables=0for verbatim names). - Optional variable expansion inside file contents. New+ only substitutes variables in filenames; this plugin can also expand them in the file body for chosen extensions (off by default — see Variable Expansion Inside File Contents).
The plugin panel is empty. The templates folder does not exist or is
empty. Check TemplatesPath in TCNewPlus.ini (the default is the
Templates folder next to the plugin DLL) and refresh with Ctrl+R. If
you have a %APPDATA%\GHISLER\TCNewPlus.ini, that file is used instead of
the one shipped with the plugin — edit whichever one is in effect.
A copied file still contains $YYYY in its name. Either
ReplaceFilenameVariables=0 is set in the INI, or the pattern is not one of
the supported variables — the patterns are case-sensitive ($yyyy is not
substituted).
Two templates show as Name.txt and Name (2).txt. Two different
template files collapse to the same display name after prefix stripping
and substitution (for example 1. Note.txt and 2. Note.txt). The
plugin disambiguates them so both stay reachable; rename the templates on
disk to give them distinct names.
F6 (move) fails. By design — moving would delete the template. The
virtual file system is read-only; use F5 (copy).
The right-click menu shows Print / Rename / Move / Delete. That menu is built by Total Commander and the Windows shell, not by the plugin — the file-system-plugin interface has no hook to add or remove individual context-menu items. They are harmless here: the plugin exposes no rename/move/delete operations (it doesn't export those functions), so they cannot change your templates — manage templates in the real folder on disk (see Managing Templates). Hiding the Windows shell verbs is a Total Commander configuration choice, independent of this plugin.
I navigated to a path under \\\TCNewPlus that doesn't exist and got an
empty panel. That is intentional: a non-existent sub-path shows an empty
listing so the panel stays inside the plugin instead of jumping back to a
previous directory. Press Backspace (or cd ..) to return to the
template list. The same applies if you "open in a new tab" on the
templates-folder link entry — use Enter on it instead, which follows it
to the real folder.
Where does this entry come from? / Why isn't my setting applied? Press
Alt+Enter (Properties) on any entry to see the real template path on disk,
the active templates folder, which TCNewPlus.ini is actually in effect
(and whether it exists), and the parsed value of every setting. This makes it
obvious when a per-user %APPDATA%\GHISLER\TCNewPlus.ini is shadowing the
shipped one, or when a key was put in the wrong section.
Build instructions, repo layout and architecture notes for developers live in CONTRIBUTING.md.
This project is licensed under the Apache License 2.0 — see
LICENSE.md for the full text. Source files carry SPDX
identifiers (SPDX-License-Identifier: Apache-2.0). Release notes are in
CHANGELOG.md.





