Batch file 递归地重命名文件和文件夹

Batch file 递归地重命名文件和文件夹,batch-file,cmd,Batch File,Cmd,我读过这篇文章,但我不能满足我的要求 我的文件夹结构是: _TEMPLATE_ |_ _TEMPLATE_SUBFOLDER1 | |_ _TEMPLATE_SUB_SUBFOLDER1 | | |_ _TEMPLATE_FILE11.txt | | |_ _TEMPLATE_FILE12.xml | |_ _TEMPLATE_SUB_SUBFOLDER2 | | |_ _TEMPLATE_FILE21.txt | | |_ _TEMPLATE_FILE2

我读过这篇文章,但我不能满足我的要求

我的文件夹结构是:

_TEMPLATE_
|_ _TEMPLATE_SUBFOLDER1
|   |_ _TEMPLATE_SUB_SUBFOLDER1
|   |   |_ _TEMPLATE_FILE11.txt
|   |   |_ _TEMPLATE_FILE12.xml
|   |_ _TEMPLATE_SUB_SUBFOLDER2
|   |   |_ _TEMPLATE_FILE21.txt
|   |   |_ _TEMPLATE_FILE22.xml
|   |_ TEMPLATE_SUB_SUBFOLDER3
|_ _TEMPLATE_SUBFOLDER2
    |_TEMPLATE_FILE3.xml
我想将u模板u替换为所需的名称 对于ex.Stores,结果将是

Stores
|_ StoresSUBFOLDER1
|   |_ StoresSUB_SUBFOLDER1
|   |   |_ StoresFILE11.txt
|   |   |_ StoresFILE12.xml
|   |_ StoresSUB_SUBFOLDER2
|   |   |_ StoresFILE21.txt
|   |   |_ StoresFILE22.xml
|   |_ StoresSUB_SUBFOLDER3
|_ StoresSUBFOLDER2
    |StoresFILE3.xml
我在网上搜索过,可以选择只遍历文件。而且他们都没有去
谢谢。

未经测试,但我认为这会奏效

@echo off
setlocal disableDelayedExpansion
for /f "delims=" %%F in ('dir /b /ad /s _TEMPLATE_*') do (
  set "fname=%%~nxF"
  set "fpath=%%~dpF"
  setlocal enableDelayedExpansion
  ren "!fpath:_TEMPLATE_=Stores!!fname!" "!fname:_TEMPLATE_=Stores!"
  endlocal
)
这可能有点棘手,因为循环正在修改它正在枚举的层次结构的文件夹名称。每个文件夹的父文件夹在到达时都已重命名

如果未重命名的根路径的名称中也有_TEMPLATE u,则不会给出正确的结果


我在循环中切换延迟扩展,以防止系统崩溃!在扩展FOR变量期间输入路径名。如果您知道没有文件夹名称包含!然后,您可以在顶部使用SETLOCAL EnableDelayedExpansion,并从循环中删除SETLOCAL和ENDLOCAL。

未测试,但我认为这会起作用

@echo off
setlocal disableDelayedExpansion
for /f "delims=" %%F in ('dir /b /ad /s _TEMPLATE_*') do (
  set "fname=%%~nxF"
  set "fpath=%%~dpF"
  setlocal enableDelayedExpansion
  ren "!fpath:_TEMPLATE_=Stores!!fname!" "!fname:_TEMPLATE_=Stores!"
  endlocal
)
这可能有点棘手,因为循环正在修改它正在枚举的层次结构的文件夹名称。每个文件夹的父文件夹在到达时都已重命名

如果未重命名的根路径的名称中也有_TEMPLATE u,则不会给出正确的结果


我在循环中切换延迟扩展,以防止系统崩溃!在扩展FOR变量期间输入路径名。如果您知道没有文件夹名称包含!然后,您可以在顶部使用SETLOCAL EnableDelayedExpansion,并从循环中删除SETLOCAL和ENDLOCAL。

可能的重复:@Dirk谢谢..:帖子帮助我重命名文件,但没有重命名文件夹。。无论如何,一半的工作已经完成了。。如何递归重命名子文件夹?要重命名文件夹,您必须使用附加循环,但使用for/r/d。可能重复:@Dirk谢谢..:帖子帮助我重命名文件,但没有重命名文件夹。。无论如何,一半的工作已经完成了。。如何递归重命名子文件夹?要重命名文件夹,您必须使用附加循环,但使用for/r/d。