批处理脚本随机重命名单个选定文件

批处理脚本随机重命名单个选定文件

我正在尝试编写一个批处理/.bat 脚本,将单个文件重命名为随机字符串。到目前为止,我搜索到的所有结果都是重命名单个目录中的所有文件 - 这比我想要的要多一点。

以下示例脚本是我正在研究的基础。它基本上将工作目录中的所有 .txt 文件重命名为某个随机的 8 个字符长度的文件名,并保留文件扩展名:

@echo off
setlocal disableDelayedExpansion
set "chars=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for /f "eol=: delims=" %%F in ('dir /b /a-d *.txt') do call :renameFile "%%F"
exit /b

:renameFile
setlocal enableDelayedExpansion
:retry
set "name="
for /l %%N in (1 1 8) do (
  set /a I=!random!%%36
  for %%I in (!I!) do set "name=!name!!chars:~%%I,1!"
)
echo if exist !name!.jpg goto :retry
endlocal & ren %1 %name%.txt

我之所以只希望重命名单个文件,是因为我的最终目标是创建一个使用脚本的 shell 扩展 - 我希望能够右键单击单个文件,单击“随机重命名”,然后调用批处理文件将选定的文件重命名为某个随机名称。

如果有人能对上述代码提供任何帮助,那就太好了!谢谢

答案1

我如何更改批处理文件以将单个文件重命名为随机字符串?

您可以将要更改的文件的名称作为参数传递%1给批处理文件。

修改后的批处理文件如下:

@echo off
setlocal enableDelayedExpansion
set "chars=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
:retry
set "name="
for /l %%N in (1 1 8) do (
  set /a I=!random!%%36
  for %%I in (!I!) do set "name=!name!!chars:~%%I,1!"
)
if exist !name!%~x1 goto :retry
endlocal & ren %1 %name%%~x1

笔记:

  • 只有文件名部分%1是随机的。
  • 现有的扩展被保留。

例子:

F:\test>dir *.dat
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

15/12/2015  12:59                 0 random.dat
               1 File(s)              0 bytes
               0 Dir(s)  1,776,913,768,448 bytes free

F:\test>test random.dat

F:\test>dir *.dat
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

15/12/2015  12:59                 0 IYSPA2FS.dat
               1 File(s)              0 bytes
               0 Dir(s)  1,776,913,768,448 bytes free

进一步阅读

答案2

这很简单。这是批处理文件:

@echo off
set name=%1
set newname=%random%%random%
ren %name% %newname%.txt

之后,您需要转到注册表中要重命名的文件扩展名的部分。 在我的情况下,我会转到HKEY_CLASSES_ROOT\.txt并检查默认键的值。 在我的情况下,它是 Notepad++_file。 然后我转到HKEY_CLASSES_ROOT\Notepad++_file,创建一个新的子项,例如“重命名为随机”并在其中添加子项“命令”(不带引号)。 在其中HKEY_CLASSES_ROOT\Notepad++_file\shell\Rename to Random\command我将默认值编辑为"C:\Temp\random_rename.bat" "%1"(带引号!)

之后,当我右键单击每个 txt 文件并选择“重命名为随机”选项时,它会被重命名为 8 位数字的名称。

PS 将批处理文件添加到注册表时,请编辑其实际位置的路径。此外,您还可以将变量编辑%newname%为您想要的任何内容。在我的情况下,它的名称由两个 4 位数字组组合而成,每个组都由系统变量生成%random%

查看了解注册表中的分步操作。

相关内容