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。