我有五十个目录,成对的,名称如下:
ABC123-aaa-X0001
ABC123-bbb-X0001
XYZ456-aaa-X0001
XYZ456-bbb-X0001
SDF543-aaa-X0001
SDF543-bbb-X0001
我想删除名称的所有“-aaa-X0001”部分,最终得到以下内容:
ABC123
ABC123-bbb-X0001
XYZ456
XYZ456-bbb-X0001
SDF543
SDF543-bbb-X0001
然后我想将“-bbb-X0001”目录移动到相应的重命名目录中,最终得到:
ABC123
XYZ456
SDF543
因此,这些都将包含相应“-aaa-X0001”目录的原始内容,以及作为子目录的相应“-bbb-X0001”目录。
我希望这一切都可以使用批处理文件来完成。
要重命名目录,我首先尝试使用以下REN
命令:
REN *-aaa-X0001 *
我很快发现通配符不适用于目录名称。
然后我尝试使用MOVE
命令:
MOVE *-aaa-X0001 *
这也不起作用。
我还尝试了基于以下的各种想法:
for /d "tokens=1,2,3 delims=-"
但是我对此无能为力。
我花了几个小时无处可去,所以我希望有人能帮忙!
谢谢。
我如何能
使用以下批处理文件 (test.cmd):
示例用法:
延伸阅读
在从命令行重命名文件中,我们看到了如何使用重命名命令重命名文件。我们也可以使用重命名命令来重命名目录。请参阅下面的语法。
重命名 dir_oldname dir_newname 示例:
G:\data>mkdir dir1 G:\data>dir /b dir1 G:\data>rename dir1 dir2 G:\data>dir /b dir2 G:\data> 注意,使用 rename 命令,我们不能移动文件到另一个驱动器或目录。此命令只是重命名现有文件/文件夹而不创建新文件。这就是为什么它不接受目标文件名的完整路径。如果您尝试这样做,您将收到错误 - “命令的语法不正确。”
例子:
C:\docs>ren 1.txt c:\docs\2.txt 命令语法错误。下面的重命名命令工作正常。
C:\docs>ren c:\docs\1.txt 2.txt C:\docs>dir /b 2.txt 我们还可以使用 ren(rename 的缩写形式)进行重命名操作。Ren 和 Rename 都指的是同一个命令。
此命令可用于重命名所有 Windows 操作系统版本(即 Windows 2000、XP、Vista 和 Windows 7)上的文件或目录。
对于您的五十个或更多目录,具有可预测的名称布局,此 bat/cmd 代码可以自动执行任务,因此无需编辑。
因此,您不需要将所有已知的文件夹名称添加到您的bat / cmd
if
文件中的任何条件中。1)使用
for /f
循环列出所有文件夹,其中布局目标由标记分隔-
并使用1-2-3
标记,并且%%~a-%%~b-%%~c
对于您的文件夹名称布局变得相同SDF543-bbb-X0001
/on
2)您可以使用
if not
检查变量中是否定义了任何值(上一个/最后列出的文件夹)_dir
,如果条件为真,则当前文件夹将移动到_dir
变量中定义的上一个文件夹名称的最后路径,只有当路径和名称的一部分与当前变量匹配时才会发生这种情况%~fa
3)下一个命令对我来说没有意义,也就是说,我不知道它是如何工作的,即使理论上它不应该工作,但实际上它工作......
4)添加第二个 for 循环以根据需要重命名文件夹,
-%%~b-%%~c
从名称中删除关于第 3项中的机制
我承认我不明白它是如何工作的,并且我缺乏解释这里所做的事情的知识,对此感到抱歉,理论有点像:
该命令
set "_dir =" <null
似乎总是被执行,操作员||
永远不应该执行该命令set "_dir = %%~fa-%%~b-%%~c"
,但是使用具有延迟扩展启用的变量,这可能是使这项工作起作用的解释。对于命令行帮助,您可以使用
/?
:在互联网上,您可以获得更多帮助:
放
任
目录
RD/RMDIR
对于 /f
转到:EOF
启用延迟扩展
If, Else If, Else, If defined, Errorlevel ...
条件执行 || && | 与运营商...