我有一个C:\ CurrentProjects目录和一个C:\ HistoricProjects目录
当前项目目录的布局为C:\ CurrentProjects \ LocationName \ ProjectYear #### \ ProjectTitle \ etc ...
我想搜索一个特定的Project Year,并将其及其所有子文件夹移至以下位置:
C:\ HistoricProjects \ LocationName \ etc ...
使用相同的位置名称,而不会移动任何其他项目年份。
因此,例如:
C:\ CurrentProjects \ Chicago \ ProjectYear2013 \ etc ...
C:\ CurrentProjects \ Chicago \ ProjectYear2014 \ etc ...
C:\ CurrentProjects \ Chicago \ ProjectYear2015 \ etc ...
C:\ CurrentProjects \ Seattle \ ProjectYear2013 \ etc ...
C:\ CurrentProjects \ Seattle \ ProjectYear2014 \ etc ...
C:\ CurrentProjects \ Seattle \ ProjectYear2015 \ etc ...
VVVV
C:\ HistoricProjects \ Chicago \ ProjectYear2013 \ etc。
C:\ HIstoricProjects \ Seattle \ ProjectYear2013 \ etc。
在您的测试目录中尝试以下操作:
FOR /D %d IN (*\ProjectYear2014\) DO (MOVE %d\ProjectYear2014\ C:\HistoricProjects\%d\ProjectYear2014 )
该命令的基础是:
FOR /D %d IN :: for directories, store matches in variable %d
(*\ProjectYear2014\) :: that are located in (anything)\ProjectYear2014
DO (MOVE %d\ProjectYear2014\ :: Move target (match)\...
C:\HistoricProjects\%d\ProjectYear2014 ) :: To new directory ...
我只是想解释一下,::
这相当于DOS中的注释,但是对它们却非常挑剔。绝对不要在代码块内(例如,在FOR
块内)使用注释,并且如果您尝试使命令像第二个示例一样跨多行,则CMD会阻塞。我只是用这种方式写的,以帮助解释发生了什么。
这是您已经拥有的代码:
@echo off
Set /P YEAR=Project Year to move?
FOR %%A IN (ATTRIB C:\ActiveTest*\"ProjectYear %YEAR%") DO
::I can't figure out how to make DIR look back and only pull the 2nd level into a variable.
::If I can get that I figure I can work it into a ROBOCOPY somehow.
结合它们,您的最终结果将是这样,但可能不完全是这样:
@echo off
Set /P YEAR=Project Year to move?
FOR /D %d IN (C:\CurrentProjects\*\ProjectYear%YEAR%\) DO (MOVE C:\CurrentProjects\%d\ProjectYear%YEAR%\ C:\HistoricProjects\%d\ProjectYear%YEAR%\ )
ew,对我来说,这是一个学习过程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句