Batch file 基于当前父文件夹名称将特定子文件夹移动到新父文件夹的批处理脚本

Batch file 基于当前父文件夹名称将特定子文件夹移动到新父文件夹的批处理脚本,batch-file,Batch File,我有一个C:\CurrentProjects目录和一个C:\HistoricProjects目录 显示当前项目目录 C:\CurrentProjects\LocationName\ProjectYear\ 我想搜索特定的项目年度,并将其及其下的所有子文件夹移动到: C:\HistoricProjects\LocationName\etc 使用相同的位置名称,而不移动任何其他项目年份 例如: C:\CurrentProjects\Chicago\ProjectYear2013\etc. C:\Cu

我有一个C:\CurrentProjects目录和一个C:\HistoricProjects目录

显示当前项目目录 C:\CurrentProjects\LocationName\ProjectYear\

我想搜索特定的项目年度,并将其及其下的所有子文件夹移动到:

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

VVV

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 ...
我只是想解释一下,
相当于一条评论,但是它对它们非常挑剔。注释不应在代码块内使用(例如,在
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%\ )

对我来说,这是一个学习的过程

好的,那你的问题是什么?StackOverflow是一个问答网站,而不是一个“为我制作一个程序”网站(如果我们是免费的家庭作业,那对学生来说不是很好!)。你已经试过什么了?您想使用DOS或KSH等吗?很抱歉,这是新的。昨天自学了DOS中批处理编码的基本知识,现在仍然掌握了这一点。到目前为止,我已经得到了@echo:)。明白了。你能输入到目前为止你所拥有的吗?(在这里输入我明白了)@echo off Set/P YEAR=要移动的项目年?对于%%A IN(ATTRIB C:\ActiveTest*\“ProjectYear%YEAR%”),我不知道如何使DIR回过头来,而只将第二级拉入变量。如果我能得到它,我想我可以把它变成机器人。希望可以使用通配符匹配,这样您就可以移动C:\CurrentProjects\(*)\(*)2014 C:\HistoricProjects\(\1)\(\2)2014。如果这是不可能的,而且这样一个简单的解决方案对您很有吸引力,您可能想看看CYGWIN,一个用于windows的UNIX shell,特别是如果您做了很多类似这样的“批处理”操作的话!此操作运行平稳,但仍无法移动文档。您指出它正在创建一个参数来存储目录信息,然后在最后根据每个参数运行命令,我认为这解释了很多。我想我需要做的是创建另一个参数,该参数提取位置级别的名称,而不是将其视为变量。这样我就可以使用第二部分中的绝对路径。我会试着把它放在一起,看看它是否有效!解决方案:
@ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION机器人副本C:\CurrentProjects C:\HistoricProjects/e/xf*/lev:2/ns/nc/nfl/ndl/njh/njs:Start SET/p YEAR=项目的移动年份是什么?对于(*)中的/d%%G,是否(Echo%%G移动“C:CurrentProjects\%%G\ProjectYear%YEAR%”“C:\HistoricProjects\%%G”)暂停Echo移动另一个项目年?选项/c YN IF errorlevel 2 goto:End IF errorlevel 1 goto:Start:End for/f“delims=“%%d in('dir c:\HistoricProjects/s/b/ad^ | sort/r')do(rd“%%d”)
@Eric做你自己的答案,这样你就可以接受它作为解决方案:)那么任何像你这样有问题的人都会发现你的答案就是问题的答案。:)