我正在尝试编写一个批处理/.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
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 启用延迟扩展- 延迟扩展将导致变量在执行时而不是在解析时扩展。
- 对于/l- 有条件地对一系列数字执行命令。
- 参数- 命令行参数(或参数)是传递到批处理脚本的任何值。
答案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%
。
查看这了解注册表中的分步操作。