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

Batch file 批量重命名子文件夹强制递归,batch-file,cmd,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!" ) 要执行此任务,请从For循环中选择仅选择那些实际包含符号的目录 使用Dir命令: @Ech

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

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

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

使用
Dir
命令:

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
对于/F“Delims=“%%A In('Dir/B/S/AD-S-L“C:\T\*&*”)Do(设置“CN=%%~nxA”
SetLocal EnableDelayedExpansion
Echo Ren“%%A”“!CN:&=and!”
(本地)
暂停
或者使用标准的“集合”和
For
并使用其目录和递归选项:

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
对于(“*&*”)Do中的/D/R“C:\T”%%A(设置“CN=%%~nxA”
SetLocal EnableDelayedExpansion
Echo Ren“%%A”“!CN:&=and!”
(本地)
暂停
如果您对输出满意,可以从第
5行
中删除
Echo
,也可以选择删除第
7行


或者,您可以在批处理文件中使用一行基于PowerShell的

PowerShell-NoProfile-Command“Get ChildItem-Path'C:\T'-Filter'*&*'-Recurse | Where Object{$$.psicContainer}| Foreach{Rename Item$\.FullName$\.Name.Replace('&',and')-WhatIf}”&Pause
或使用别名缩短线条:

PowerShell-NoP“GCI”C:\T'-Filt'*&*'-Rec |?{$.psicContainer}}{124;%{RnI$\.FullName$\.Name.Replace('&','and')-Wh}“&Pause
在这两种情况下,如果您对输出感到满意,可以删除
-WhatIf
-Wh
选项和可选的
&Pause
&Pause



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

使用
FOR/R/D
而不是仅使用
/D
,更准确地说,代码应该用五个字符的字符串代替所有的符号,而不是三个字符的字符串!注意包含
的目录名字符。非常感谢Compo,虽然你的答案是最彻底、最有见地的,但是这行有点不对劲。它呈现“命令的语法不正确”。有什么想法吗?抱歉@WalidMohammed,我已经修改了两个
For
循环示例来纠正我的错误,请重试。