Swiss File Knife is a supercharged command line tool which crams around 100 functions into a single executable.
The program can search for files by content, or name. It's able to list the contents of directories, create or delete directory trees. And you get a lengthy list of text and file processing options: LF <> CRLF, tab <> space, hex <> binary, hex <> dec, insert string, replace string, sort string, split file, join file, more.
This would be useful in itself, but Swiss File Knife does a whole lot more. The program also includes commands to synchronise a folder tree, find duplicate files, cut video and binary files, create MD5 hashes, send UDP or HTTP requests, download HTTP files, even run instant FTP and HTTP servers.
Most of these commands deliver far more than you'd expect. The List command doesn't just list files in a directory tree, for example: it also supports a host of archive formats. And it's enormously flexible, with more than 35 switches, which can themselves be combined in many different ways, and have their output passed on to other Swiss File Knife commands.
There's also plenty of scripting support, with tools to get user input, run sequences of Swiss File Knife commands, run commands on every file in a folder, run commands in a loop, and more.
Perhaps most surprising of all, though, Swiss File Knife isn't too difficult to learn. There's a lot to explore, but the syntax of each command is relatively straightforward. When listing files, for example, there's no "-n -l -p" garbage: instead you'll use switches like -time, -hidden, -sort, -minsize, -maxsize and so on. You can probably guess what they do already. And if you can't, a truly excellent PowerShell-like local Help system explains all.
- rel: 10.01.2018, Minor Update
- sum: improved scripting error messages.
better rename support in scripts.
added filter option to skip first lines.
- add: sfk renfile, rename just a single file,
for use in sfk scripts.
- add: filter -skipfirst=n to skip first n lines.
- chg: -nocol given locally at a command no longer
changes the global color mode.
- chg: scripts: every command given like +cmdname
can now be used in a script, no longer producing
the error "does not support input chaining".
- add: sfk ren, xren: option -quiet to print nothing.
- add: sfk ren, xren: now tells number of changed files.
option -[no]stat to show or hide statistics.
- add: sfk rmtree: option -quiet to print nothing,
option -stat to show statistics with -quiet.
- fix: scripts: unknown commands were ignored silently,
they now produce an error "unknown command".
- fix: -memlimit=3000 did not work.
- fix: sfk prompt help text.
- doc: improved prompt example.
- rel: 06.12.2017, Major Update
- sum: improved scripting with if begin endif blocks.
better display of windows filenames on more codepages.
added sfk rand to create random numbers,
sfk prompt to allow user input.
fixed xex return code handling
and stop of script after sfk status.
- chg: windows: improved display of european filenames
using non latin characters in the own codepage.
- chg: sfk batch tmp.bat: the example is now
a short number game with status lights.
- add: scripting: +if expr +begin ... +endif
to execute multiple commands as one block
if given expression is true.
- add: scripting: easy check if a variable text contains
a phrase by: if "#(contains(mystr,'text'))"
- add: if: support for if "rc<>1" to check if command rc
is different to a value.
- add: sfk rand to create a random number.
- add: sfk prompt to ask for user input.
- chg: sfk status: no longer requires protocol version.
- fix: xex: return code was always 1 if previous
command set it, no matter if xex found data.
- fix: fixfile: option -dewide displayed invalid date 1900...
in simulation preview.
- fix: possible crash on setvar with empty value.
- fix: status: silent stop of command chain with
some following commands like +list
- chg: windows OSE compile support for MSVC 14.
- chg: chaining from +tell to other commands like +setvar
no longer requires +then.
- chg: improved tracing of variable expansion
by -debug like +tell -debug "#(strlen(a))"
- doc: xex: how to check if a variable contains a word.
- doc: help var: how to search a variable in a variable.