Batch file 批量重命名子文件夹强制递归
下面的代码将文件夹名称中的“&”字符替换为单词“and”。如何强制递归进入子文件夹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
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
循环示例来纠正我的错误,请重试。