以下代码将文件夹名称中的'&'字符替换为单词“ and”。如何强制递归进入子文件夹?
setlocal enableDelayedExpansion
FOR /D %%f IN ("C:\T\*") DO (
set "old_name=%%~nxf"
SET "newfname=!old_name:&= and !"
REN "%%~ff" "!newfname!"
)
答案 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
两侧的字符。