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

任何关于这种情况下的想法将不胜感激。

+0

你现在的代码是什么? – 2010-07-13 19:32:29

+0

当前的代码是移动* .r D:\ destination \。我知道这是错误的,但我不知道如何在Windows下做到这一点...... – suyao 2010-07-13 19:55:00

+0

它是哪个版本的Windows?如果你可以使用powershell,那么这可能会使编程更容易。 – 2010-07-13 20:27:06

回答

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 
+1

他不能使用表示法以跳过将dir输出写入文件? – 2010-07-13 21:10:52

+0

@roguenot:对,你是第一次尝试它,我错误地使用了“字符而不是”,它没有工作 – zdan 2010-07-13 21:18:45

+0

它完全有效,谢谢!Ďakujem! – suyao 2010-07-13 21:57:38

0

查看Windows for命令行功能(你会对使用'command'的/ F操作符感兴趣)。您应该可以使用dir的/ b和/ o选项来生成所需的文件列表。然后使用一个变量跳过第一个(即最新的,假设你的排序顺序是正确的),应该是这样。我目前不在我的Windows PC上,所以很抱歉,我无法用勺子喂给你确切的答案:)

相关问题