如何将除最新文件之外的所有文件移动到文件夹中?

问题描述 投票:0回答:3

我有一个 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),因为该文件有时仍在写入,移动它可能会导致目标文件夹中的文件覆盖下次运行该批处理,并导致文件内容丢失。

有关此案例的任何想法将不胜感激。

windows batch-file move
3个回答
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 /O-D”,跳过目录“/A-D”并存储在 临时文件。
  2. 遍历临时文件的每一行,跳过 第一行(最新的文件),执行 mv 命令 每个。
  3. 删除您的临时文件。

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

for /F "skip=1" %f IN ('dir /TW /O-D /A-D /B') DO mv %f wherever

0
投票

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


0
投票

for /f "skip=1 delims=" %%F in ('dir *.log /b/a-d/o-d') do ( 移动 /Y D: Focus_Log\W3SVC1%%F D: Focus_Log\W3SVC1\Temp%%F )

https://github.com/almamun977/IIS_LOG_TRANSFER

© www.soinside.com 2019 - 2024. All rights reserved.