【发布时间】:2019-08-11 08:44:58
【问题描述】:
我们正在尝试使用批处理文件将文档移动到特定的子目录中。这些文件都以日期格式开头: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 个月时,它将返回到年份提示符,当我们输入 2019 时,它将返回到提供者提示符。
任何帮助实现这一点都会很棒!
【问题讨论】:
-
一条建议:首先使用
/L开关执行您的Robocopy:它会显示您想要执行的所有操作,然后您可以检查是否一切正常,然后才删除/L来自您的Robocopy,您将确保所有复制命令都是正确的。 -
我已经测试了 Robocopy 命令,它确实像我们希望的那样运行。不过谢谢。
-
要么使用for /L 循环,要么使用disassemble 文件名。
-
我尝试过使用 for /L 循环,但我无法让它超过第一个月,它只是一遍又一遍地循环 01::loop for /L %%i in ( 1, 1, 13) do ( call :Command set "month=0%%i" !month:~-2!)
-
如果您使用
set并在代码块中使用它,您需要enabledelayedexpansion参见set /?
标签: loops batch-file