批量重命名子文件夹强制递归

时间:2018-08-02 10:06:59

标签: batch-file cmd

以下代码将文件夹名称中的'&'字符替换为单词“ and”。如何强制递归进入子文件夹?

setlocal enableDelayedExpansion
FOR /D %%f IN ("C:\T\*") DO (
    set "old_name=%%~nxf"
    SET "newfname=!old_name:&= and !"
    REN "%%~ff" "!newfname!" 
)

1 个答案:

答案 0 :(得分:0)

要执行此任务,请从For循环中,选择仅选择那些实际包含与号的目录。

使用Dir命令:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /F "Delims=" %%A In ('Dir /B/S/AD-S-L "C:\T\*&*"') Do (Set "CN=%%~nxA"
    SetLocal EnableDelayedExpansion
    Echo Ren "%%A" "!CN:&= and !"
    EndLocal)
Pause 

或者使用带有For的标准“集合”并利用其目录和递归选项:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /D /R "C:\T" %%A In ("*&*") Do (Set "CN=%%~nxA"
    SetLocal EnableDelayedExpansion
    Echo Ren "%%A" "!CN:&= and !"
    EndLocal)
Pause

如果您对输出感到满意,则可以从行Echo 中删除5,也可以选择删除行7


作为替代,您可以在批处理文件中使用基于PowerShell的一行:

PowerShell -NoProfile -Command "Get-ChildItem -Path 'C:\T' -Filter '*&*' -Recurse | Where-Object { $_.PSIsContainer } | Foreach { Rename-Item $_.FullName $_.Name.Replace('&', ' and ') -WhatIf }" & Pause

或使用别名来缩短行:

PowerShell -NoP "GCI 'C:\T' -Filt '*&*' -Rec|?{$_.PSIsContainer}|%%{RnI $_.FullName $_.Name.Replace('&',' and ') -Wh}"&Pause

在这两种情况下,如果您对输出感到满意,则可以删除-WhatIf | -Wh选项,也可以删除 & Pause | &Pause


在上述所有情况下,我都选择将&替换为 and ,如果您希望将这些实例替换为三个字符串,请删除 SPACE 首选解决方案中and两侧的字符。