使用批处理重命名文件夹
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 /F
的 tokens=*
选项确保保留路径中的空格(删除前导空格,但路径无论如何都不可能这样做)。 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
被处理之前先被重命名。
所以这让我很困惑
我需要帮忙做这个 ('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 /F
的 tokens=*
选项确保保留路径中的空格(删除前导空格,但路径无论如何都不可能这样做)。 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
被处理之前先被重命名。