我正在重组现有数据,我需要创建一个新的子目录来接收所有现有文件和目录。这样做的目的是为新产品线腾出空间,同时改进现有数据的命名约定。
例如,当前看起来像这样的数据:
\root directory\
+-proj1357
+-closing binder
+-refi
+-compliance
+-proj2468
+-disbursements
+-compliance
+-proj3579
+-pre-close
+-compliance
Run Code Online (Sandbox Code Playgroud)
实际上应该是这样的:
\root directory\
+-proj1357
+-dpl
+-closing binder
+-refi
+-compliance
+-proj2468
+-dpl
+-disbursements
+-compliance
+-proj3579
+-dpl
+-pre-close
+-compliance
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我似乎无法在不陷入递归循环的情况下获得正确的命令。在一起破解这个问题时,我经常遇到错误,“无法执行循环复制”。
好消息是我有一个可行的解决方案,但它需要三个单独的命令和每个项目目录的自定义语法。
command 1> ROBOCOPY G:\proj1357 DPL /E /MOVE
command 2> MOVE G:\proj1357\DPL\DPL\*.* G:\proj1357\DPL
command 3> RMDIR G:\proj1357\DPL\DPL\
Run Code Online (Sandbox Code Playgroud)
据我所知,命令 1 将所有文件和目录移动到新的子目录中。它还通过将项目级目录中的文件移动到更深的子目录中而导致递归问题。所以我依靠命令 2 来恢复曾经在项目级目录中的文件。然后命令 3 删除更深的子目录。
有没有更好的方法可以通过基于 Windows 的系统运行命令或批处理文件? 理想情况下,它会遍历所有项目级目录,并将内容移动到新的子目录。我正在考虑处理一千多个项目,所以我认为花时间弄清楚如何正确循环它是值得的。
在尝试使用上面概述的三步命令行方法使其工作后,我放弃并调整了 jiggunjer 的答案以适应我的环境。下面是我使用的 MS 批处理文件。我还添加了注释以阐明每一行的目的。
@echo off
rem run this batch file in top level directory
rem …Run Code Online (Sandbox Code Playgroud)