我已阅读this帖子,但无法满足我的要求。
我的文件夹结构是:
_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
我想将_TEMPLATE_
替换为所需名称
对于前Stores
所以结果将是
Stores
|_ StoresSUBFOLDER1
| |_ StoresSUB_SUBFOLDER1
| | |_ StoresFILE11.txt
| | |_ StoresFILE12.xml
| |_ StoresSUB_SUBFOLDER2
| | |_ StoresFILE21.txt
| | |_ StoresFILE22.xml
| |_ StoresSUB_SUBFOLDER3
|_ StoresSUBFOLDER2
|StoresFILE3.xml
我在网上搜索了只有遍历文件的选项。并且没有一个递归重命名 谢谢。
答案 0 :(得分:4)
未经测试,但我认为这会有效
@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_
,则无法提供正确的结果。
我在循环内切换延迟扩展,以防止在扩展FOR变量期间路径名中!
的损坏。如果您知道没有文件夹名称包含!
,那么您可以在顶部使用SETLOCAL EnableDelayedExpansion
并从循环中删除SETLOCAL和ENDLOCAL。