批处理文件,仅获取前一天的文件并将其复制到其他位置

时间:2013-03-22 16:28:26

标签: scripting batch-file copy

好的,所以我做了一些研究,但在这里遇到了一些障碍。我尝试做的是,(使用事件调度程序),每天运行批处理,只获取前一天的" ips * .csv文件(*只是日期格式)并复制它在其他地方,对于我的测试,我使用过" destiny ips"夹。我想我已经搞砸了最后一道障碍。

 FORFILES /P "C:\Users\J\Desktop\ips bat\source ips" /M "ips*.csv" /C "cmd /c XCOPY C:\Users     \J\Desktop\ips bat\source ips folder C:\Users\J\Desktop\ips bat\destiny ips" /D -1

感谢您提前提供任何帮助。

强尼

3 个答案:

答案 0 :(得分:1)

要在命令行中包含特殊字符,请使用0xHH格式的字符的十六进制代码(例如0x09是TAB字符,0x22是双引号“字符。)因此”C:\ Program Files \“变为^ 0x22C:\ Program ^ Files \ ^ 0x22

FORFILES 
   /P "C:\Users\J\Desktop\ips bat\source ips" 
   /M "ips*.csv" 
   /C "cmd /c 
     XCOPY ^0x22C:\Users\J\Desktop\ips^ bat\source ips folder^0x22
           ^0x22C:\Users\J\Desktop\ips^ bat\destiny ips^0x22" 
   /D -1

为了便于阅读,我将它分成多行,但你想把它放回一行。

答案 1 :(得分:1)

for /f "delims=" %%i in (
 'dir /b /o:-d "c:\users...etc...ips*.csv" ' ) do (
 xcopy /d "%%i" "C:\Users\J\Desktop\ips bat\destiny ips\" &goto :eof
 )

应该非常简单地执行此操作(实际上,它可以全部位于一行)它只会将最新版本的文件复制到目标 - 然后才会将目标文件尚未存在(或者与源中的版本不同。)这应该照顾周末或公众假期等非运营日期。

如果目的地保留所有历史记录(即目的地中可能有ips*.csv个文件不在源中,反之亦然(反之亦然)(“昨天”的新文件除外))然后简单地

xcopy /d "c:\users...etc...ips*.csv" "C:\Users\J\Desktop\ips bat\destiny ips\"

就足够了。

关键点是:

  1. 目的地以“\”结尾,表示“这是一个目录名称”
  2. / d将告诉XCOPY仅复制新文件或更新文件。
  3. (按理说......等等......是所需路径名的其余部分 - DOS不是通灵的)

答案 2 :(得分:0)

这看起来很可疑 - :

 XCOPY C:\Users     \J\Desktop\ips bat\source 

这是对的吗?