SmartCopy v0.3.1
Windows file copy · move

Resume after a break,
verify before deleting.

When Explorer's copy dialog is interrupted, it will not tell you how far it got. SmartCopy queues the work so you can pause and resume, and deletes a move's source only after the copy has been verified. Pull the USB, lose the NAS, reboot — the progress is still there.

No install · no admin rights · Windows 10 / 11 (64-bit)

Actual layout · sample data
SmartCopy v0.3.1 Admin consoleLogs─ □ ✕
Source
D:\Photos 2024
D:\Camera originals
Destination
E:\Backup
Action
CopyMove
Verify
SHA-256
Start
Photos 2024 → Backup Running
12,481 / 20,004 files 14.2 GB / 22.8 GB 186 MB/s Time left 00:47

12,481 done · 0 skipped · 0 failed · 8.6 GB left

D:\Photos 2024\2024-07\IMG_4821.ARW

Pause Cancel
Project archive → NAS Waiting to reconnect
3,902 / 6,110 files 41.0 GB / 64.3 GB Paused

Device disconnected — will continue when it comes back (WinError 64)

Invoices → Archive Done
412 / 412 files SHA-256 verified
The order of a move

The source goes last

A move is three steps. Each waits for the one before it.

Step 1

Copy

writes to the destination as .scpart a temporary file. Only when it is fully written does it take the final name, so a half-written file never looks like a finished one.

Step 2

Verify

Size and modified time are compared, and SHA-256 too when you ask for it. If anything differs, that copy is deleted and written again.

Step 3

Delete the source

Only files that passed verification lose their source. Skipped files keep theirs, and empty folders are tidied up at the end.

A move within the same drive is just a rename — fast, with no in-between state at all. The three steps above are only for crossing drives.

When the name is already taken

Six conflict policies

Decide up front when you create the job, or have it ask each time. If you choose to be asked, the dialog offers Apply to later conflicts tooas a checkbox.

PolicyWhat it doesWhen to use it
overwriteOverwrites the destinationOne-way backups where the source is always newest
skipSkips it and leaves the source aloneFilling in only what is missing
renamename (1).extas a new fileWhen both must be kept (default)
keep_newerKeeps whichever was modified more recentlyMerging a folder edited on both sides
keep_largerKeeps whichever is largerWhen truncated files are mixed in
askShows both sizes and times and asksWhen each case needs judgement
Interruptions · unplugging · power loss

It remembers where it stopped

Progress does not live only on screen — it is written to disk. So closing the app or losing power does not send you back to the start.

The job journal

Each finished file is appended as one line. Because it only ever appends, a power cut damages at most the last line — and that line is simply dropped.

  • Run it again and finished files are skipped
  • A job that ends successfully deletes its own journal
  • On startup it finds unfinished jobs and asks whether to continue

%LOCALAPPDATA%\SmartCopy\jobs\

Resuming inside a single file

For a big file, .scpartkeeps exactly how far it got. It resumes only after a sidecar file confirms the source still has the same size and modified time.

  • If the source changed, it starts over instead of resuming
  • Leftovers from another job are cleared on the spot

USB unplugged · NAS dropped

When a device disappears it is not counted as a failure — the job goes Waiting to reconnect When it comes back, work continues from where it stopped.

WinError 21 · 53 · 59 · 64 · 1167

Only the failed files, again

Temporary trouble — a file locked by another program, say — is retried automatically after 0.5s, then 2s, then 5s. What still fails lands in a list, and the Retry button runs just those again — keeping the folder structure as it was.

When nobody is watching

Set it once, it runs on its own

If you press the same buttons every time, that is work for a program.

Watched folder

When files land in the folder and go quiet, it runs the job you saved. It never grabs a file that is still being written — it waits for the changes to stop.

smartcopy-cli watch "Delivery" --folder D:\CardDump

Task Scheduler

Daily at 3 a.m., or at logon. No administrator rights to set it, and you can delete it from the Windows Task Scheduler itself.

smartcopy-cli schedule --install "Weekly backup" --when daily --at 03:00

Right-click in Explorer

Right-click a folder and your saved job names appear. Picking one fills the window with those settings — you still press Start.

Certificates vouch for each other

A single certificate is easy to throw away. So each one carries the hash of the one before it — pull one out of the middle and the chain breaks.

smartcopy-cli ledger --verify

This is not a timestamping authority. What it stops is delivering ten times and showing only the nine you like.

Even with 100,000 of them

The queue keeps the order

What it handlesHow
Chunk sizePicked from the medium — 4 MB for fixed disks, 1 MB for USB, 256 KB for the network. Pause and cancel answer at chunk boundaries, so it is not enlarged for its own sake.
Concurrent jobsTwo by default, because several jobs hammering the same disk makes everything slower.
PriorityEach job carries a priority and the higher ones go first. Ties keep the order they were added.
Enumerating in bulkscandir based traversal, and symbolic links and junctions are not followed, so it never falls into a copy loop.
Long paths · UnicodeHandled with the path prefix that sidesteps the 260-character limit. Unicode names are left exactly as they are.
Progress updatesBatched to once every 0.2 s — so that at 100,000 files, drawing the screen never costs more than the copying.
Files at onceWithin one job, several files are copied at the same time (up to 16). It pays off most with many small files or over a NAS.
Rate limitA ceiling in bytes per second. For when a backup runs while you are in a meeting. The workers share one bucket.
FilteringInclude and exclude patterns, whole-folder exclusions, size and date ranges, and skipping hidden files.
PreviewWorks out what would move without writing anything at all.
Pre-flight checksFree space at the destination, whether the destination sits inside the source, whether it is a protected path, and whether the sources exist — all checked first.

It is slower than robocopy. For every file it records resume information, verifies what it copied, and writes to the journal — those three are the reason this program exists. On an internal SSD that is roughly 5-15× slower for many small files and about 7× for one large file. The measurements and the method are in the repository.

Every job in one place

Admin console

The window shows what is moving now; the console shows the whole picture — queue, history, recovery, logs, integrity check. smartcopy-cli admin or the window's Admin console button opens it.

What you see

  • Progress banner — combined progress, speed and time left across jobs
  • Job cards — state chip, progress, done / identical / skipped / failed
  • Job details — the failure list with reasons, warnings, average speed
  • Recovery — pick up an interrupted job or throw it away
  • Integrity check — compare the destination against the manifest

What you can do

  • New job — a path picker, filters, performance options
  • Pre-flight — protected paths and free space flagged in advance
  • Pause / resume / cancel / retry failures (one job or all)
  • Adjusting how many jobs run at once

The console opens on 127.0.0.1 only and needs a token that is freshly made on every run. An outside domain pointed at this address (DNS rebinding) is stopped by the Host check, and a request another site makes your browser send is stopped by the Origin check.

Without a window

The same engine on the command line

For batch files and Task Scheduler, use smartcopy-cli.exe.

# copy a folder + verify with SHA-256 > smartcopy-cli copy "D:\Photos 2024" E:\Backup --verify hash [running] [################----] 83.3% 14.2 GB/22.8 GB 186 MB/s ETA 00:47 # move — rename if the name is taken > smartcopy-cli move C:\Archive E:\Store --conflict rename # see interrupted jobs and continue > smartcopy-cli recover > smartcopy-cli recover --resume # compare a copy you made earlier > smartcopy-cli verify D:\Source E:\Backup\Source --level hash # register the Explorer menu (current user, no admin rights) > smartcopy-cli shell --install
Download

Neither one needs installing

Settings and logs live under %LOCALAPPDATA%\SmartCopy and nowhere else.

Window UI

SmartCopy.exe

Drag and drop to load, and watch progress on job cards. The Explorer right-click menu calls this file too.

13.6 MB · SHA-256 2e1f9b91034f8cea14cf6d2236741b7a165b25ebaf364e1b9a7d203578892197

Download

Command line

smartcopy-cli.exe

copy · move · recover · verify · shell. Good for scripts and schedulers.

13.6 MB · SHA-256 d3f8f003b8d1f2b22faf621b5b1531c73a6e456315124e609be43b9e55d53c96

Download

Explorer right-click integration

Right-click a file or folder for Add to SmartCopy, and in the folder you are moving to, Set as SmartCopy destination. Load them in several goes — they all gather in one window.

Registered under HKEY_CURRENT_USER only — one shell --uninstall undoes it

What you need

  • Windows 10 / 11 (64-bit)
  • No administrator rights needed
  • Works with SMB · NAS · USB · removable disks
  • Python 3.9 or newer to run from source (standard library only)