使用循环按日期批处理文件移动文件

时间:2019-03-20 15:27:40

标签: loops batch-file

我们正在尝试使用批处理文件将文档移动到特定的子目录中。所有文件均以日期格式开头:mmddyyyy_filename。我们的文件夹结构如下:c:\ client \ user \ year \ month。文件全部下载到c:\ client \ user目录中。从那里,我们必须将文件分类为相应的年份,然后分类为相应的月份。其中一些目录将具有10000+个文件,因此手动进行非常耗时。我们已经创建了一个批处理文件,该文件允许我们为客户,用户,年份和月份设置变量,但是如果可能的话,我们希望自动遍历月份和年份。当前的批处理文件如下所示:

@echo off

:client
set /p client= Which client?

:Provider
set /p provider= Which provider (First initial, last name)?
/k if %provider% == clean GOTO Cleanup
/k if %provider% == x GOTO client
/k if %provider% == *. * GOTO Year

:Year
set /p year= Which year (4 digit year)?
if %year% neq 2019 GOTO Month
if %year% == 2019 GOTO provider

:Month
set /p month= Which month (2 digit number)?
if %month% neq 13 GOTO Command
if %month% == 13 GOTO Year

:Command
E:
cd E:\Backups\"%client%"\"%Provider%"\
move %month%??%year%_* E:\Backups\"%client%"\"%Provider%"\%year%\%month%
GOTO Month

:Cleanup
ROBOCOPY "E:\Backups\%client%" "E:\Backups\%client%" /S /MOVE
GOTO client

我们希望不要在每个月中输入01、02、03等,而是在每个月中循环输入而无需任何用户输入。理想情况下,它也会在2007-2018年之间循环。当前,当我们输入第13个月时,它将返回到Year提示,当我们键入2019时,它将返回我们到提供程序的提示。

任何帮助实现这一目标的方法都会很棒!

1 个答案:

答案 0 :(得分:0)

这可能无法按预期方式工作,因为您的示例还不完整,但这只是为了演示您的要求。

它将提示我以moveclean为例的任务(您要执行的任务)。询问提供者和客户。该循环将在每年的该年和该年的每个月进行,您可以根据需要添加/删除。

@echo off
set "mm=01 02 03 04 05 06 07 08 09 10 11 12"
set "yyyy=2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019"
set /p "task=enter task (clean, move): "
set /p "client=Which client?: "
set /p "provider= Which Provider? (Initial, Lastname): "
if "%task%"=="clean" (
     echo robocopy "E:\Backups\%client%" "E:\Backups\%client%" /S /MOVE
  )
)
if /i "%task%"=="move" (
for %%a in (%yyyy%) do for %%i in (%mm%) do (
      echo mkdir "E:\Backups\%client%\%provider%\%%a\%%i" 2>nul
      echo move %%i??%%a_* "E:\Backups\%client%\%provider%\%%a\%%i"
  )
)

注意!以上内容只是为了安全起见,echo循环中的命令,删除echo命令将执行实际任务。