Batch file 替换当前文件夹和子文件夹中所有文件名中的字符串

Batch file 替换当前文件夹和子文件夹中所有文件名中的字符串,batch-file,Batch File,我一直在论坛上搜索,但找不到满足我需求的解决方案。 我有以下代码以扩展名替换filename中定义的字符串。是否可以将其更改为在当前文件夹和子文件夹中进行搜索 @echo off Setlocal enabledelayedexpansion Set "Pattern=3688" Set "Replace=0000" For %%a in (*.txt) Do ( Set "File=%%~a" Ren "

我一直在论坛上搜索,但找不到满足我需求的解决方案。 我有以下代码以扩展名替换filename中定义的字符串。是否可以将其更改为在当前文件夹和子文件夹中进行搜索

@echo off
Setlocal enabledelayedexpansion

Set "Pattern=3688"
Set "Replace=0000"

For %%a in (*.txt) Do (
    Set "File=%%~a"
    Ren "%%a" "!File:%Pattern%=%Replace%!"
)

非常感谢

你很接近了。使用
切换
/R
(用于递归)并适应
设置“File=%%~nxa”
(因为
ren
的第二个参数仅支持文件名-无路径信息)


如果您只循环包含
模式的那些模式,而不是所有模式,并且只在需要时启用延迟扩展,这将更有意义

下面是一个完整的示例:

@Set“Pattern=3688”
@设置“替换=0000”
@对于(“*%Pattern%*.txt”)中的/R%%G,请执行@(设置“BaseName=%%~nG”
SetLocal EnableDelayedExpansion
Ren“%%G”“!基本名称:%Pattern%=%Replace%!%%~xG”
(本地)
但是请注意,这将不适用于定义为
模式
替换
的任何字符串
,非常感谢您的回答:),但我无法使其工作。。。你能试试吗?对不起,这是做什么用的?(您注意到了,我只是通过回显命令“解除”了
ren
命令的武装?)
@echo off
setlocal enabledelayedexpansion
Set "Pattern=3688"
Set "Replace=0000"

For /R %%a in (*.txt) Do (
    Set "File=%%~nxa"
    ECHO Ren "%%a" "!File:%Pattern%=%Replace%!"
)