繁体   English   中英

重命名子文件夹中的文件

[英]Renaming files in sub folders

@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

现在我将每个文件夹 1 个 1 个复制并放在 main.txt 文件夹中
并双击 rename.bat,这将花费很长时间

我还将 rename.bat 文件复制到文件所在的文件夹,然后在那里双击它

我有超过 100 个文件夹,所以这是永远的

你可以试试:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM