使用批处理脚本重命名目录及其子目录内的所有文件

使用批处理脚本重命名目录及其子目录内的所有文件

我想将位于特定目录及其子目录中的所有文件的名称和扩展名重命名为 25 个字母符号(字母和数字)的随机组合,该组合等于文件名。文件扩展名应为“.TEST”

我发现以下脚本仅在父目录中重命名,并且仅将名称更改为随机整数。

@ echo off
setlocal EnableDelayedExpansion
for %%F in ("%userprofile%\music\*.*") do (
    ren "%%~F" "!RANDOM!.test"
)
endlocal

那么如何处理所有子目录以及字母和数字的组合呢?

答案1

在单词后面加上 /R,for这样它就会递归到子目录中

@ echo off
setlocal EnableDelayedExpansion
for /R "%userprofile%\music\" %%F in (*.*) do (
    ren "%%~fF" "%%~fF%RANDOM%.test"
)
endlocal

请参阅此处有关递归 for 循环的更多详细信息:https://ss64.com/nt/for_r.html

对于随机数生成,将 RANDOM 括在 % 符号中,如%RANDOM%https://riptutorial.com/batch-file/example/32511/random-numbers

如果您想在原始文件名和新扩展名之间添加一个点,请尝试ren "%%~fF" "%%~F.%RANDOM%.test"。在我的系统上,它将名称格式化为Textures\Interface\VUI+\solid_black.dds.230.test

对于 powershell 我会做类似的事情(这是一次试运行;当您对它的工作原理感到满意并想要实际执行重命名时,请从行中删除 -WhatIf

Get-ChildItem $env:USERPROFILE\music\ -Recurse -File | Rename-Item -WhatIf -NewName { $_.Name + "." + (Get-Random -Maximum 1000)+ ".test"}

相关内容