在Windows中批量重命名子目录

在Windows中批量重命名子目录,windows,batch-file,rename,command-prompt,subdirectory,Windows,Batch File,Rename,Command Prompt,Subdirectory,我有一个包含数千个子目录的目录,其中包含需要重命名的自己的子目录。我使用的是一台Windows 7计算机,我没有管理员权限,因此我无法下载一个简单的程序来完成这项工作 现在我有一个测试目录C:\test,其中有几个子目录,这些子目录名为old,我正试图使用批处理文件将其更改为new 为了清楚起见,我想要以下内容: C:\test\1\old C:\test\2\old C:\test\3\old C:\test\1\old C:\test\2\old C:\test\3\old 成为 C:\te

我有一个包含数千个子目录的目录,其中包含需要重命名的自己的子目录。我使用的是一台Windows 7计算机,我没有管理员权限,因此我无法下载一个简单的程序来完成这项工作

现在我有一个测试目录
C:\test
,其中有几个子目录,这些子目录名为
old
,我正试图使用批处理文件将其更改为
new

为了清楚起见,我想要以下内容:

C:\test\1\old C:\test\2\old C:\test\3\old C:\test\1\old C:\test\2\old C:\test\3\old 成为

C:\test\1\new C:\test\2\new C:\test\3\new C:\test\1\new C:\test\2\new C:\test\3\new
感谢您提供的任何帮助。

这是我很快想到的。我在本地运行了一个快速测试,它似乎满足了您的要求:

@echo off

FOR /D %%D IN ("C:\test\*") DO CALL :RENAME %%D

:RENAME
SET CRITERIA=\old
FOR /D %%R IN (%1%CRITERIA%) DO RENAME %%R "new"

将其保存到bat文件中,并尝试一下。希望这会有所帮助。

贾斯汀的回答对我的类似问题确实有帮助,尽管默认情况下它只处理了\a\B\C的一个更简单的模式,其中a是一个基本目录,B是一些未确定的目录,C是您要查找的目录

我修改了他的脚本,使基本目录A通过任意层递归,直到找到C

以下是脚本,编写时希望使用命令行参数:

@echo off

set BASEDIR=%1
SET CRITERIA=\%2
SET REPLACENAME=%3

call :FindDirs %BASEDIR%

GOTO END

:FindDirs
FOR /D %%F IN ("%1\*") DO CALL :RENAME %%F
GOTO:EOF

:RENAME
REM echo DIR=%1
FOR /D %%R IN ("%1%CRITERIA%") DO (
    if EXIST %%R RENAME %%R "%REPLACENAME%"
)
call :FindDirs %1
GOTO:EOF

看看robocopy和for命令(提示下的help将帮助您开始),它在我提供的测试场景中起作用,但对于我想要重命名的真实文件夹,它不起作用。我不确定这是因为有多个子目录,还是子目录名称中的特殊字符影响了它。所以我把范围缩小到子目录有括号这一事实。有办法吗?很有趣。重命名命令应适用于任何有效的目录名。子目录只有两层深吗?这意味着它的深度只有C:\test\1\old?实际目录的格式是:C:\test\1111(AAAA)\old@innate:您可能需要在
%%D
(在
:RENAME
之后的那一个)、
%1%CRITERIA%
%%R
周围(在
RENAME
之后的那一个)添加引号。在第一个循环之后添加
GOTO:EOF
也是一个好主意,以便在完成时跳过子例程。但是,我认为这里不需要第二个循环或子例程。只需将
…DO CALL:重命名%%D
…重命名“%%D\old”new
,您就应该这样做。举个例子说明这是如何工作的?我试过这样的方法:subbrn“_Release”“48x48”“40x40”。。。其中subbrn是bat文件。我有一个名为_Release的目录,与bat文件位于同一目录中。我正在尝试将_Release的所有子文件夹(文件夹名为48x48)重命名为40x40。实际上,这是可行的,尽管完成后会返回一个错误。“系统找不到指定的批次标签”