我想将目录名称从
view_pictures
personal_pictures
scenic_pictures
到
2017_view_pictures
2017_personal_pictures
2017_scenic_pictures
每个文件夹内都有文件,这只是一个虚构的例子,源目录中有超过 20K 个子目录,因此无法手动重命名。
我尝试使用树命令,
这样我就可以使用 notepad++ 和一些正则表达式来操作列表,
但是树不会提供完整路径,所以我可以生成一个命令。
这是目录结构:
root path
picsfromA
view_pictures
personal_pictures
picsfromB
view_pictures
personal_pictures
scenic_pictures
picsfromC
personal_pictures
scenic_pictures
picsfromD
personal_pictures
picsfromN
scenic_pictures
这是所需的目录结构:
root path
picsfromA
2017_view_pictures
2017_personal_pictures
picsfromB
2017_view_pictures
2017_personal_pictures
2017_scenic_pictures
picsfromC
2017_personal_pictures
2017_scenic_pictures
picsfromD
2017_personal_pictures
picsfromN
2017_scenic_pictures
更新
我也在这样尝试:
困难的部分是打破路径字符串并重建它。
@echo off
SETLOCAL
set folder_path=%%f
for /D /r %%f in (*) do (
set folder_path=%%f
echo %folder_path%
if "%folder_path:~-13%" EQU "view_pictures" (
REM path without last folder name
REM construct path without folder name
REM [ren old folder] , [new folder.]
)
)
答案1
这是一个使用 FOR /D /R 的有效解决方案
@echo off
for /d /r %%F in (*) do (
if /i "%%~nxF" == "view_pictures" ren "%%F" "2017_%%~nxF"
if /i "%%~nxF" == "personal_pictures" ren "%%F" "2017_%%~nxF"
if /i "%%~nxF" == "scenic_pictures" ren "%%F" "2017_%%~nxF"
)
或者用额外的循环来简化
@echo off
for /d /r %%F in (*) do for %%A in (view personal scenic) do (
if /i "%%~nxF" == "%%A_pictures" ren "%%F" "2017_%%~nxF"
)
或者您可以使用 LotPings 发布的 FOR /F 解决方案。
你也可以使用我的JREN.BAT 正则表达式重命名实用程序。JREN 是纯脚本(混合 JScript/batch),可在 XP 及更高版本的任何 Windows 机器上本地运行 - 无需第三方 exe 文件。
jren "^" "2017_" /s /d /fm "scenic_pictures|personal_pictures|view_pictures"
答案2
for /D /r %%f in (*) do (
是无效的组合,请通过回显查看输出。
- 你可以堆叠两个
for /D
来首先迭代picsfrom..
然后迭代子文件夹或 for /f
使用正则表达式(末尾有锚点)过滤解析目录输出,以便仅使用 findstr 匹配所需的子文件夹:
@Echo off
Set "Folders=view_pictures$ personal_pictures$ scenic_pictures$"
For /f "delims=" %%F in (
'Dir /B/S/AD ^|Findstr /I "%Folders%"'
) Do Ren "%%~fF" "2017_%%~nxF"
我的 RAM 驱动器 A 上的示例树:
> tree
A:\
└───root path
├───picsfromA
│ ├───2017_personal_pictures
│ └───2017_view_pictures
├───picsfromB
│ ├───2017_personal_pictures
│ ├───2017_scenic_pictures
│ └───2017_view_pictures
├───picsfromC
│ ├───2017_personal_pictures
│ └───2017_scenic_pictures
├───picsfromD
│ └───2017_personal_pictures
└───picsfromN
└───2017_scenic_pictures
编辑for /D /r %%A in (*) do Echo:%%A
我的系统上的输出
A:\root path\picsfromA
A:\root path\picsfromB
A:\root path\picsfromC
A:\root path\picsfromD
A:\root path\picsfromN
A:\root path\picsfromA\2017_personal_pictures:A:\root path\picsfromN
A:\root path\picsfromA\2017_view_pictures:A:\root path\picsfromN
A:\root path\picsfromB\2017_personal_pictures:A:\root path\picsfromN
A:\root path\picsfromB\2017_scenic_pictures:A:\root path\picsfromN
A:\root path\picsfromB\2017_view_pictures:A:\root path\picsfromN
A:\root path\picsfromC\2017_personal_pictures:A:\root path\picsfromN
A:\root path\picsfromC\2017_scenic_pictures:A:\root path\picsfromN
A:\root path\picsfromD\2017_personal_pictures:A:\root path\picsfromN
A:\root path\picsfromN\2017_scenic_pictures:A:\root path\picsfromN