【问题标题】:How to rename files in folders to foldername using batch file如何使用批处理文件将文件夹中的文件重命名为文件夹名称
【发布时间】:2013-04-22 10:15:51
【问题描述】:


你们中的任何人都可以帮助我解决我在多个文件夹中放置大量同名文件时遇到的问题。
文件夹以数字命名,但其中的文件名为 index.XXXX - 其中 XXXX 可以是 .jpg 或 .html 或 .pdf。
我想制作一个“程序”,可以将所有“索引”文件重命名为与它们所在的文件夹相同的名称。
这些文件夹以 6 位数字命名 - 完全不同。
希望完成此操作后,我想将所有重命名的文件移动到一个新的单个文件夹中,这样我可以更轻松地查看全部内容。
期待阅读您的答案。

【问题讨论】:

  • 它是特定于操作系统的。在 POSIX 系统和 Windows 系统上有所不同。

标签: file batch-file rename move directory


【解决方案1】:
@Echo OFF

FOR /D /R %%# in (*) DO (
    PUSHD "%%#"
    FOR %%@ in ("index*") DO (
        Echo Ren: ".\%%~n#\%%@" "%%~n#%%~x@"
        Ren "%%@" "%%~n#%%~x@"
    )
    POPD
)

Pause&Exit

经过测试的文件夹结构:

C:\Users\Administrador\Desktop\Nueva carpeta (3)\123321
C:\Users\Administrador\Desktop\Nueva carpeta (3)\123321\Index.txt

C:\Users\Administrador\Desktop\Nueva carpeta (3)\123456
C:\Users\Administrador\Desktop\Nueva carpeta (3)\123456\Index.php

C:\Users\Administrador\Desktop\Nueva carpeta (3)\123456\000000
C:\Users\Administrador\Desktop\Nueva carpeta (3)\123456\000000\Index.css

C:\Users\Administrador\Desktop\Nueva carpeta (3)\654321
C:\Users\Administrador\Desktop\Nueva carpeta (3)\654321\Index.html

C:\Users\Administrador\Desktop\Nueva carpeta (3)\654321\666999
C:\Users\Administrador\Desktop\Nueva carpeta (3)\654321\666999\Index.jpg

输出:

Ren: ".\123321\Index.txt"      "123321.txt"
Ren: ".\123456\Index.php"      "123456.php"
Ren: ".\654321\Index.html"     "654321.html"
Ren: ".\000000\Index.css"      "000000.css"
Ren: ".\666999\Index.jpg"      "666999.jpg"

【讨论】:

  • 当然要在Ren "%%@之后添加一个Move "%%~n#%%~x@*" "C:\destination\" " "%%~n#%%~x@ 行,确保在目标 apth 中写入最后一个反斜杠:C:\Path\ (GOOD) C:\Path (BAD)
  • 我用 Move...有没有只移动重命名文件的命令?
【解决方案2】:

如果您希望 GUI 完成上述所有操作,请使用 Bulk File Rename

打开它,浏览到您的文件夹。现在检查选择标签中的子文件夹选项。将列出文件夹下的所有文件。在浏览器中选择文件。

文件 选项卡中,将第一个选项从 Keep 切换到 Remove。然后转到附加文件夹名称选项卡并为属性名称设置选项前缀。点击重命名完成。

这样做的好处是它可以预览您的文件将被重命名的内容。

【讨论】:

    【解决方案3】:

    我同意 Brandon 的观点,即批量文件重命名 (http://www.bulkrenameutility.co.uk/) 是在 Windows 下使用目录名称重命名/后缀文件的好方法。

    要将所有重命名的文件复制到一个公共目录,请使用 Windows 资源管理器搜索所有带有通配符的文件名(例如 readme*.txt)。然后选择所有找到的文件,选择复制,导航到目标目录,然后粘贴。

    【讨论】:

      【解决方案4】:
      @ECHO OFF
      SETLOCAL enabledelayedexpansion
      SET startfrom=c:\sourcedir
      SET destdir=c:\destdir
      FOR /f "delims=" %%i IN ('dir /s /b "%startfrom%\index.*"') DO (
       FOR %%e IN (jpg html pdf) DO IF /i .%%e==%%~xi (
        FOR %%d IN ("%%~dpi.") DO (
         SET "var=%%~nxd"
         IF "!var:~6!"=="" (
          SET "var="
          SET /a var=1%%~nxd 2>NUL
          IF DEFINED var IF !var! geq 1000000 IF !var! leq 1999999 (
           ECHO MOVE "%%i" "%destdir%\%%~nxd%%~xi"
          )
         )
        )
       )
      )
      
      • 获取“index.*”文件
      • 过滤指定的扩展
      • 找到直接目录名
      • 检查不超过 6 个字符
      • 尝试将set 变量设置为 1000000..1999999(如果是 6 位名称)
      • 如果成功ECHO移动命令(删除ECHO关键字执行移动)

      带注释的测试结构:

      c:\sourcedir\index.pdf                not 6-digit dir
      c:\sourcedir\000000\index.jpg
      c:\sourcedir\000009\index.css         extension not specified
      c:\sourcedir\000009\index.html
      c:\sourcedir\000009\index.jpg
      c:\sourcedir\000009\index.pdf
      c:\sourcedir\000009\index.txt         extension not specified
      c:\sourcedir\010+39\index.txt         not 6-digit dir
      c:\sourcedir\12345\index.jpg          not 6-digit dir
      c:\sourcedir\1234567\index.jpg        not 6-digit dir
      c:\sourcedir\123x56\index.jpg
      c:\sourcedir\50000-0000\index.jpg     not 6-digit dir
      c:\sourcedir\5000000000\index.jpg     not 6-digit dir
      c:\sourcedir\999-99\index.jpg         not 6-digit dir
      c:\sourcedir\999999\index.jpg
      c:\sourcedir\a\index.jpg              not 6-digit dir
      c:\sourcedir\yellow\index.jpg         not 6-digit dir
      

      结果:

      MOVE "c:\sourcedir\000000\index.jpg" "c:\destdir\000000.jpg"
      MOVE "c:\sourcedir\000009\index.html" "c:\destdir\000009.html"
      MOVE "c:\sourcedir\000009\index.jpg" "c:\destdir\000009.jpg"
      MOVE "c:\sourcedir\000009\index.pdf" "c:\destdir\000009.pdf"
      MOVE "c:\sourcedir\999999\index.jpg" "c:\destdir\999999.jpg"
      

      【讨论】:

      • 我的解释是所有 index.* 文件都要被处理。 Fiberflux 必须确认。
      • 我尝试了这个解决方案 - 但什么也没发生。可能是因为一些文件夹实际上是 7 位数。 Elektro Hacker 的解决方案运行良好,但没有移动文件。