在子文件夹中使用随机文件名批量重命名文件
Bulk rename files with random filenames in subfolders
好的,所以我想自动将许多文件重命名为随机的字母数字名称,场景如下:
我有一个包含多个子文件夹的文件夹,在每个子文件夹中都有几个文件,其命名方式如下:
文件夹 A
ABCDE.a1.ext
ABCDE.a2.ext
ABCDE.a3.ext
...
文件夹 B
FGHIJ.a1.ext
FGHIJ.a2.ext
FGHIJ.a3.ext
...
我想要的是将文件重命名为随机名称,但保留后缀和扩展名,例如:
文件夹 A
HJGKU.a1.ext
HJGKU.a2.ext
HJGKU.a3.ext
...
文件夹 B
EOBPZ.a1.ext
EOBPZ.a2.ext
EOBPZ.a3.ext
...
有人知道如何在 Batch 中执行此操作吗?
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "olddir="
FOR /f "tokens=1,2*delims=." %%a IN (
'dir /s /b /a-d "%sourcedir%\*.*.*" '
) DO IF "%%c" neq "" (
CALL :randomname "%%a"
CALL ECHO(REN "%%a.%%b.%%c" "%%randname%%.%%b.%%c"
)
GOTO :EOF
:randomname
IF "%olddir%"=="%~1" GOTO :EOF
set "olddir=%~1"
SET "randname="
SETLOCAL enabledelayedexpansion
:randnlp
SET /a $=%RANDOM% %% 36
SET /a $$=0
FOR %%s IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9) DO (
IF !$$!==%$% SET randname=%randname%%%s
SET /a $$+=1
)
IF "%randname:~4%"=="" GOTO randnlp
ENDLOCAL &SET "randname=%randname%"
GOTO :eof
您需要更改 sourcedir
的设置以适合您的情况。
所需的 REN 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(REN
更改为REN
以实际重命名文件。
执行目录扫描,子目录在 .
上标记化,并通过要求 %%c
非空来确保有 3 个部分。
将基本文件名传递给 randomname
例程,如果发现基本名称发生变化,该例程会生成一个新的随机名称。
我使用了幻数 36(for %%s
字符串中的字符数)和 4(比随机名称中要求的字符数少一个)
构建指令并echo
它。
编辑:我根据评论稍微修改了代码:
@echo off
setlocal EnableDelayedExpansion
set "alphaNum=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
rem I got a folder with multiple subfolders,
for /D %%s in (*) do (
rem in each subfolder
cd "%%s"
rem there are a couple of files named in a pattern like: ABCDE.a1.ext
rem I want the files renamed to random names,
set "ranName="
for /L %%i in (1,1,5) do (
set /A "ranNum=!random! %% 36"
for %%r in (!ranNum!) do set "ranName=!ranName!!alphaNum:~%%r,1!"
)
rem but preserving the suffix and extension, like: HJGKU.a1.ext
ren "*.*.*" "!ranName!.*.*"
cd ..
)
好的,所以我想自动将许多文件重命名为随机的字母数字名称,场景如下:
我有一个包含多个子文件夹的文件夹,在每个子文件夹中都有几个文件,其命名方式如下:
文件夹 A
ABCDE.a1.ext
ABCDE.a2.ext
ABCDE.a3.ext
...
文件夹 B
FGHIJ.a1.ext
FGHIJ.a2.ext
FGHIJ.a3.ext
...
我想要的是将文件重命名为随机名称,但保留后缀和扩展名,例如:
文件夹 A
HJGKU.a1.ext
HJGKU.a2.ext
HJGKU.a3.ext
...
文件夹 B
EOBPZ.a1.ext
EOBPZ.a2.ext
EOBPZ.a3.ext
...
有人知道如何在 Batch 中执行此操作吗?
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "olddir="
FOR /f "tokens=1,2*delims=." %%a IN (
'dir /s /b /a-d "%sourcedir%\*.*.*" '
) DO IF "%%c" neq "" (
CALL :randomname "%%a"
CALL ECHO(REN "%%a.%%b.%%c" "%%randname%%.%%b.%%c"
)
GOTO :EOF
:randomname
IF "%olddir%"=="%~1" GOTO :EOF
set "olddir=%~1"
SET "randname="
SETLOCAL enabledelayedexpansion
:randnlp
SET /a $=%RANDOM% %% 36
SET /a $$=0
FOR %%s IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9) DO (
IF !$$!==%$% SET randname=%randname%%%s
SET /a $$+=1
)
IF "%randname:~4%"=="" GOTO randnlp
ENDLOCAL &SET "randname=%randname%"
GOTO :eof
您需要更改 sourcedir
的设置以适合您的情况。
所需的 REN 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(REN
更改为REN
以实际重命名文件。
执行目录扫描,子目录在 .
上标记化,并通过要求 %%c
非空来确保有 3 个部分。
将基本文件名传递给 randomname
例程,如果发现基本名称发生变化,该例程会生成一个新的随机名称。
我使用了幻数 36(for %%s
字符串中的字符数)和 4(比随机名称中要求的字符数少一个)
构建指令并echo
它。
编辑:我根据评论稍微修改了代码:
@echo off
setlocal EnableDelayedExpansion
set "alphaNum=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
rem I got a folder with multiple subfolders,
for /D %%s in (*) do (
rem in each subfolder
cd "%%s"
rem there are a couple of files named in a pattern like: ABCDE.a1.ext
rem I want the files renamed to random names,
set "ranName="
for /L %%i in (1,1,5) do (
set /A "ranNum=!random! %% 36"
for %%r in (!ranNum!) do set "ranName=!ranName!!alphaNum:~%%r,1!"
)
rem but preserving the suffix and extension, like: HJGKU.a1.ext
ren "*.*.*" "!ranName!.*.*"
cd ..
)