我们正在尝试使用批处理文件将文档移动到特定的子目录中。所有文件均以日期格式开头: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时,它将返回我们到提供程序的提示。
任何帮助实现这一目标的方法都会很棒!
答案 0 :(得分:0)
这可能无法按预期方式工作,因为您的示例还不完整,但这只是为了演示您的要求。
它将提示我以move
和clean
为例的任务(您要执行的任务)。询问提供者和客户。该循环将在每年的该年和该年的每个月进行,您可以根据需要添加/删除。
@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
命令将执行实际任务。