好的,所以我想自动将许多文件重命名为随机的字母数字名称,这是场景:
我有一个包含多个子文件夹的文件夹,在每个子文件夹中都有一些文件命名为: 文件夹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中执行此操作吗?
答案 0 :(得分:1)
@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
。 在您确认命令正确后,将ECHO(REN
更改为REN
以实际重命名文件。
使用.
上的子目录标记执行目录扫描,并通过要求%%c
非空来确保有3个部分。
将基本文件名传递给randomname
例程,如果它看到基本名称发生变化,则会生成一个新的随机名称。
我使用了幻数36(for %%s
字符串中的字符数)和4(比随机名称中所需的字符数少一个)
构建指令并echo
。
答案 1 :(得分:1)
编辑:我稍微修改了相应的注释代码:
@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 ..
)