0

我有一个 Windows 框和一个包含此类文件的文件夹:

2010-07-04  20:18                81 in01_Acct_20100704001.r
2010-07-07  05:45               165 in01_Acct_20100706001.r
2010-07-07  19:41                82 in01_Acct_20100707001.r
2010-07-07  10:02                81 in01_Acct_20100707002.r
2010-07-08  08:31                89 in01_Acct_20100708001.r
2010-07-10  04:51                82 in01_Acct_20100709001.r

并且我想使用批处理定期将所有这些文件移动到除最新文件之外的另一个文件夹(即 in01_Acct_20100709001.r),因为该文件有时仍在被写入并且移动它可能会导致下一个目标文件夹中的文件覆盖运行批处理,并导致文件内容丢失。

对此案的任何想法将不胜感激。

4

2 回答 2

3

我认为这个批处理脚本可能会这样做:

dir /TW /O-D /A-D /B > %TEMP%\tempFiles.txt
for /F "skip=1" %f IN (%TEMP%\tempFiles.txt) DO mv %f wherever
del %TEMP%\tempFiles.txt

要解释这是做什么的:

  1. 按修改时间(最新的优先)“/TW /OD”排序文件列表,跳过目录“/AD”并存储在临时文件中。
  2. 遍历临时文件的每一行,跳过第一行(最新文件),对每一行执行 mv 命令。
  3. 删除您的临时文件。

编辑:根据评论,这是单行版本-您可以将 dir 命令插入 for 循环:

for /F "skip=1" %f IN ('dir /TW /O-D /A-D /B') DO mv %f wherever
于 2010-07-13T21:09:13.347 回答
0

查看命令行功能的窗口您会对使用“命令”的 /F 运算符感兴趣)。您应该能够将 /b 和 /o 选项与dir一起使用来生成所需的文件列表。然后使用一个变量来跳过第一个(即最新的,假设你的排序顺序正确),应该就是这样。我现在不在我的 Windows PC 上,很抱歉我不能用勺子喂你确切的答案:)

于 2010-07-13T21:09:24.407 回答