【问题标题】:Bulk rename files with random filenames in subfolders使用子文件夹中的随机文件名批量重命名文件
【发布时间】:2016-02-12 05:51:19
【问题描述】:

好的,所以我想自动将许多文件重命名为随机的字母数字名称,这是场景:

我有一个包含多个子文件夹的文件夹,在每个子文件夹中都有几个文件以如下模式命名:
文件夹 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-file random file-rename


    【解决方案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 ..
    )
    

    【讨论】:

    • 谢谢,这会重命名子目录中的文件,但这些文件需要相同的(随机生成的)文件名,我的意思是在我的示例中 subdir A 中的所有文件 需要相同名称(前缀):ABCDE.a1.ext, ABCDE.a2.ext, .... 而 subdir B 中的所有文件都需要一个与子目录 A 中的不同名称(前缀):EOBPZ.a1.ext, EOBPZ.a2.ext, ....
    【解决方案2】:
    @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 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO(REN 更改为REN 以实际重命名文件。

    对. 执行带有子目录标记的目录扫描,并通过要求%%c 不为空来确保有3 个部分。

    将基本文件名传递给randomname 例程,如果它发现基本名称发生变化,则会生成一个新的随机名称。

    我使用了幻数 36(for %%s 字符串中的字符数)和 4(比随机名称所需的字符数少一)

    构建指令并echo它。

    【讨论】:

    • 不起作用,echoed 它表明 子文件夹 已重命名,而不是其中的文件。如果我将 ECHO(REN 更改为 REN 它会给我语法错误。
    • 可能您在dir 命令中省略了d 之前的-。
    猜你喜欢
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多