使用批处理重命名文件夹

Renaming Folders using batch

所以这让我很困惑
我需要帮忙做这个 ('Dir /D /S A:D')
ren "New Folder" New Files"

合作

我尝试了不同的方法,但就是无法重命名文件夹
第一次尝试
@ECHO 关闭

FOR /D %%d IN ('Dir /D /S A:D') DO (
       REN "New Folder" "New Files"
)

第二次尝试

@echo off

FOR /D %%D IN ('Dir /D /S A:D') DO RENAME "%%D\New Folder" New Files

第三次尝试

@echo off

FOR /D %%D IN ('Dir /D /S A:D') DO CALL :RENAME %%D

:RENAME
SET CRITERIA=\New Folder
FOR /D %%R IN (%1%CRITERIA%) DO RENAME %%R "New Files"

我想做的是重命名文件夹。我有很多文件夹和子文件夹
每个主目录文件夹都有不同的名称,因此脚本需要读取每个文件夹并找到 New Folder 并将其重命名为 New Files

layout
Main Folder
---- Folder 1
------| New Folder
---- Folder 2
------| Folder 22
----------| New Folder

在许多不同的位置发现了新文件夹,因此脚本需要能够读取主文件夹、子文件夹等

任何对此的帮助都会很棒

更新问题

@echo off

for /f "tokens=*" %%f in ('dir /s /b a:d "New Folder"') do (
    set "filename=%%~nf"
    ren "%%f" "New Files"
)

之前

Main Folder...
Rename folder.bat
....| New Folder
......| New Folder
........| New Folder

糟糕的结果

Main Folder...
Rename folder.bat
....| New Folder
......| New Files
........| New Folder

它应该做什么

Main Folder...
Rename folder.bat
....| New Folder
......| New Files
........| New Files

需要帮助

我什至试过这个

@echo off

for /f %%f in ('dir /s /b /a:d "New Folder"') do ren "%%f" "New Files"

首先,您似乎混淆了for /D with for /F,而您需要在这里使用后者:

for /F "tokens=*" %%I in ('dir /S /B /A:D-H-S "New Folder"') do (
    …
)

这遍历以当前工作目录为根的整个目录树(不一定是批处理脚本的容器!)。 for /Ftokens=* 选项确保保留路径中的空格(删除前导空格,但路径无论如何都不可能这样做)。 dir 的开关 /A:D-H-S 确保排除文件以及隐藏目录和系统目录。

但还有一个问题:dir /S returns 每个分支中的项目从层次结构的顶部到底部,以及 for /F,连同 dir,让整个目录树在循环迭代开始之前构建。因此,当现在重命名循环体中的某个目录时,它的任何子目录都会获得新路径,尽管旧路径已被缓冲,从而使重命名失败。例如,当目录 D:\Path\To\Root\New Folder 重命名为 D:\Path\To\Root\New Files 时,子目录 D:\Path\To\Root\New Folder\New Folder 不再存在,因为它的路径现在是 D:\Path\To\Root\New Files\New Folder,因此无法找到。

要解决这个问题,只需反转整个目录树,然后迭代 sort:

cd /D "D:\Path\To\Root" & rem // (use `%~dp0.` to specify a path relative to the container of this script)
for /F "tokens=*" %f in ('dir /S /B /A:D-H-S "New Folder" ^| sort /R') do (
    ren "%%f" "New Files"
)

这样,子目录 D:\Path\To\Root\New Folder\New Folder 在其父目录 D:\Path\To\Root\New Folder 被处理之前先被重命名。