Windows 批处理 scramble/unscramble 个文件名

Windows batch scramble/unscramble filenames

我正在寻找一种通过批处理脚本 scramble/unscramble (encrypt/decrypt) 目录中每个文件的文件名的方法。一个 .bat 文件会加密当前目录中的文件名,另一个会解密它们。

我知道这是如何工作的,但缺少批处理文件 skills/experience 无法自行实现:让加密脚本找到每个文件名中每个字符的 ASCII 值,递增每个字符一定数量,然后相应地重命名每个文件。解密脚本将以类似但相反的方式运行。只是一个想法 - 只要文件名得到完全加扰和解密,我就会很高兴。

是否有愿意提供帮助的批处理文件向导?提前致谢!

这是一个利用 JREPL.BAT - a regular expression find/replace utility 的解决方案。 JREPL 是纯脚本(混合 JScript/batch),运行 从 XP 开始在任何 windows 机器上本地运行 - 不需要第 3 方 exe。

我使用简单的 ROT13 substitution cipher 运行 脚本一次加密名称。 运行 第二次将名称恢复为原始值。我选择只加密文件名,不加密扩展名。修改加密扩展也很容易。

encryptNames.bat

@echo off
pushd %1 .
call :sub
popd
exit /b

:sub  Subroutine needed to guarantee %-f0 gives the correct value
setlocal
set "find=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
set "repl=NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm"
set "p=/(.*)/"
set "prepl={}"
for /f "delims=" %%C in (
  'cmd /c "for %%F in (*) do @if "%%~fF" neq "%~f0" echo ren "%%F" "/%%~nF/%%~xF""^|jrepl find repl /t "" /p p /prepl "{}" /v'
) do echo %%C&%%C

不带任何参数调用encryptNames.bat将加密当前目录中的所有文件(encryptNames.bat文件本身除外)

您可以通过将文件夹路径作为参数传递来加密任何文件夹中的名称。例如:

encryptNames c:\my\folder\to\be\encrypted

请注意,encryptNames.bat 假定 JREPL.BAT 位于 PATH 环境变量中列出的文件夹中。如果你把JREPL.BAT和encryptNames.bat放在同一个文件夹,然后加密那个文件夹里的文件,那么JREPL.BAT就会被加密,你就不能再[=39=了] ] encryptNames.bat!