【问题标题】:Renaming files in sub folders重命名子文件夹中的文件
【发布时间】:2021-01-15 01:57:26
【问题描述】:
@echo off
for /r /d  /s %%d in (*.*) do (    
    if exist "%%d\(1).txt" ( 
        rename "%%d\(1).txt" "%%d(-123).txt"
    )
)

当我对此进行测试时,没有任何反应。我错过了什么?

我已经用几种不同的方式编辑了这个,我无法让它工作。

/s,没有它,有if exist,没有,有(*.txt),什么都没有,我真的不需要if exist,只是测试它。

我的目标是:Main Folder\folder\Sub Folders

在子文件夹中,我可以有 80 到 150 个 txt 文件,命名为 (1).txt(2).txt 等,我试图让这个批处理文件在每个子文件夹中找到所有 (1).txt,然后重命名到(-123.txt),找到所有(2).txt,重命名为(-121).txt,一直到xx.txt数字文件。

由于我没有更简单的方法来重命名这些文件,我将不得不在同一个批处理文件中多次重复此脚本。

一旦这个脚本工作,我将不得不制作许多副本并制作一个很长的脚本批次。我知道他们现在是脚本,它将按照我需要的方式重命名,但如果它可以从主文件夹扫描所有文件夹和子文件夹,那就更好了

(1).txt => (-123).txt
(2).txt => (-121).txt
(3).txt => (-119).txt
(4).txt => (-87).txt
(5).txt => (-55).txt
(6).txt => (-110).txt
(7).txt => (-101).txt

现在我有这个,但我要一个文件夹一个文件夹。

重命名.bat:

(1).txt => (-123).txt
(2).txt => (-121).txt
(3).txt => (-119).txt
(4).txt => (-87).txt
(5).txt => (-55).txt
(6).txt => (-110).txt
(7).txt => (-101).txt

有没有办法让我当前的 bat 文件读取子文件夹,因为我已经有了 rename.bat 文件。我有一个简单的基本 ren "(1).txt "(-123).txt", 这很好用,但是将其一一移动到 100 到 200 个文件夹需要很长时间

我把它叫做 main.txt 文件夹
在主文件夹中我有 rename.bat
在主文件夹中,我有一个工作文件夹
在工作文件夹中,我有 100 个文件夹和 100 个子文件夹
我正在尝试让我的 rename.bat 从主文件夹中读取工作文件夹
并扫描每个文件夹和子文件夹,并找到每个匹配的 txt 文件
当它扫描、查找和匹配每个 txt 文件时,它会重命名它们

(1).txt => (-123).txt
(2).txt => (-121).txt
(3).txt => (-119).txt
(4).txt => (-87).txt
(5).txt => (-55).txt
(6).txt => (-110).txt
(7).txt => (-101).txt

现在我将每个文件夹一一复制,并将它们放在 main.txt 文件夹中
并双击重命名 .bat,这需要永远

我还将 rename.bat 文件复制到文件所在的文件夹并在其中双击它

我有超过 100 个文件夹,所以这将永远存在

【问题讨论】:

  • 你好。 123-2=121-2=119-2=117? (87) 是从哪里来的?请解释一下,以便我们提供帮助。
  • @Toni 数字被重命名为 - 非数字顺序并且不完整,因此它不会从 123 计数到 1,这就是它的样子 1 =-123,10 = -45,并且50 = -78,你可以看到我这样重命名它们,减号很重要,数字对我的订单很重要,以及我如何将它们与数字匹配,所以我知道使用标准计数工具不起作用,什么它需要做的是用(1).txt对所有文件夹进行罚款,并将它们全部重命名为(-123).txt等等
  • 如果我正确理解了您的任务,请保持Rename.bat 不变,并与您的其他批处理文件位于同一位置,这也应该是您尝试迭代的树的根目录。然后您的批处理文件可以读取:@For /F "EOL=? Delims=" %%G In ('Dir /B /S /A:D') Do @PushD "%%G" && (Call "%~dp0Rename.bat" >NUL 2>&1 & PopD).
  • @Compo 谢谢,但我有很多子文件夹,这将调用 rename.bat,但我必须在许多文件夹中放置一个 rename.bat,我的目标是读取为主文件夹中的许多文件夹和子文件夹,使用 1 renamer.bat
  • 我会解决我的问题,我的原始问题已被编辑

标签: batch-file


【解决方案1】:

如果我正确理解了您的任务,请将Rename.bat 保持不变,并将其放在与批处理文件相同的位置,我已在下面发布,该位置也应该是您尝试迭代的树的根目录。因此,如果所有文件都在C:\Users\Javier\Desktop 下的目录和子目录中,您将拥有Rename.batC:\Users\Javier\Desktop 中的这个新批处理文件,然后只需双击您的新批处理文件!

@For /F "EOL=? Delims=" %%G In ('Dir /B /S /A:D') Do @PushD "%%G" && (Call "%~dp0Rename.bat" >NUL 2>&1 & PopD)

【讨论】:

  • 这对任何使用它的人都非常有用,只需将 Rename.bat 更改为您自己的蝙蝠名称,非常感谢
  • 嘿,我有 1 个问题,昨晚我一直在搞乱我原来的脚本问题,我如何能够将所有 (1).txt 文件重命名为 foldername(-123).txt,它是如何抓住文件夹的名称的,你知道我是怎么做到的吗,当我要测试你的答案时,我看到我的 (1).txt 都被重命名了,现在我想弄清楚,因为在我的一个项目中需要类似的东西。只是一个问题,如果你告诉我用这个脚本是不可能的,那么我会看看我做了什么,但我知道我弄乱了我所质疑的脚本
【解决方案2】:

你可以试试:

setlocal enabledelayedexpansion

set /a "numfiles=20"

for /f "tokens=* delims=" %%a in ('dir /b /s "C:\path\to\your\folder"') do (
    set "pt=%%~dpa"
    set "pt=!pt:~0,-1!"

    set "opts=tokens=* delims="
    for /l %%i in (1,1,!numfiles!) do (
        if exist "!pt!\(%%i).txt" (
            call:getrenamestring "!opts!" renamestring
            move /y "!pt!\(%%i).txt" "!pt!(!renamestring!).txt"
        )
        set "opts=tokens=* skip=%%i delims="
    )
)
goto:end



:getrenamestring
set "optstmp=%~1"
for /f "usebackq %optstmp%" %%s in ("file where you store the renaming patterns IN ROW ORDER.txt") do (
    set "%2=%%s"
    exit /b 0
)
exit /b 0


:end
endlocal
exit /b 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    相关资源
    最近更新 更多