Windows批处理加扰/解扰文件名

时间:2018-09-26 16:10:29

标签: windows batch-file encryption filenames batch-rename

我正在寻找一种通过批处理脚本对目录中每个文件的文件名进行加扰/解密(加密/解密)的方法。一个.bat文件将加密当前目录中的文件名,另一个将对其解密。

我对这可能如何工作有一个想法,但是缺乏批处理文件的技能/经验来独自实现:让加密脚本在每个文件名中找到每个字符的ASCII值,将每个字符增加一个一定数量,然后相应地重命名每个文件。解密脚本将以类似但相反的方式运行。只是一个想法-只要文件名被完全加密和解密,我就会很高兴。

有没有愿意帮忙的批处理文件向导?预先感谢!

1 个答案:

答案 0 :(得分:1)

这是一种利用JREPL.BAT - a regular expression find/replace utility的解决方案。 JREPL是纯脚本(混合JScript /批处理),可从XP开始在任何Windows计算机上本地运行-无需第三方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={$1}"
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 "{$1}" /v'
) do echo %%C&%%C

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

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

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

请注意,encryptionNames.bat假定JREPL.BAT位于PATH环境变量内列出的文件夹中。如果将JREPL.BAT放在与cryptoNames.bat相同的文件夹中,然后对该文件夹中的文件进行加密,则JREPL.BAT将被加密,并且您将不再能够运行cryptoNames.bat!