【发布时间】:2017-11-16 21:11:04
【问题描述】:
假设我有 2 个文件夹:
- C:\FolderData(将随着新文件每天递增)
- C:\FolderTemp(只需要包含执行前一天的文件,不包括小时/时间戳)
FolderData 将接收如果不是 date 则等于的文件名,如:
- SYS_PURCHASES_20170612.xls
- SYS_PURCHASES_20170613.xls
- SYS_PURCHASES_20170614.xls
如果我今天运行 .bat 文件,我需要仅将 SYS_PURCHASES_20170613.xls 复制到 FolderTemp强>.
我尝试使用 robocopy,但显然 它无法接收相同的 minage 和 maxage 值
robocopy "C:\FolderData" "C:\FolderTemp" /minage:1 /maxage:1
另外,如果我尝试:
robocopy "C:\FolderData" "C:\FolderTemp" /minage:1 /maxage:2
它会带来 both SYS_PURCHASES_20170612.xls 和 SYS_PURCHASES_20170613.xls,这不是我需要的。
除此之外,我尝试使用forfiles,但也无济于事。
forfiles /p C:\FolderData /D -1 /C "/C /copy /y @file C:\FolderTemp"
甚至
forfiles /p C:\FolderData /D -1 /C "/C /copy /y C:\FolderData\@file C:\FolderTemp"
还有其他变量,但它返回的内容是“系统无法返回指定的文件”乘以文件夹中的文件数。
请注意,下面涉及的其他过程应该忽略,只是我不知道如何执行上面的步骤。
我的批处理文件需要执行的所有步骤:
- 从文件夹 2 前 1 天的文件夹 1 文件复制(我需要帮助)
- 从文件夹 2 中的所有文件中删除最后 9 位数字(将删除日期,在 this solution 上使用循环),因此文件将是 SYS_PURCHASES.xls
- 将文件从文件夹 2 移动和替换到文件夹 3(使用简单的
move /y)
【问题讨论】:
-
这是
/maxage:1,而不是/maxage1;但我猜你需要/maxage:2。forfiles不能工作,因为/D -1说要获取一天或更早的文件(或者正确地说,昨天或更早的最后一次修改)。 -
实际上有一个使用
forfiles的变通方法——见这篇文章:FORFILES date -after- (date calc in cmd file) -
-
好的。
robocopy也考虑时间,所以当一个文件在昨天同时创建/修改时,它被认为是一天前的。forfiles但是不关心时间,所以昨天创建/修改的文件被认为是一天前的文件。 -
这对我来说太先进了,我明白我应该在 forfiles 的内部循环中在哪里添加复制命令,你能详细说明副本和文件夹需要在哪里吗?
标签: windows batch-file