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

Scripting 仅获取前一天的文件并将其复制到其他位置的批处理文件,scripting,batch-file,copy,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 i

好的,我做了一些研究,但遇到了一些障碍。我想做的是,(使用事件调度器),每天运行一个批处理,只取前一天的“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
提前谢谢你的帮助

Jonny这看起来很可疑:

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

是否正确?

要在命令行中包含特殊字符,请使用0xHH格式的字符十六进制代码(例如0x09是标签字符,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
为了便于阅读,我将其分为多行,但您需要将其放回一行

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\"
就够了

关键点是:

  • 目标以“\”结尾,表示“这是一个目录名”
  • 将告诉XCOPY仅复制新的或更新的文件的/d

  • (很显然,…etc…是所需路径名的其余部分-DOS不是通灵的)

    您好,谢谢您的帮助,对不起,我似乎无法实现这一点,可能误导了您。我的问题不是双引号,我的文件没有双引号。我的问题是,我似乎无法让逻辑发挥作用。我似乎无法获得前一天的信息,也无法复制文件。真的很有帮助,非常感谢。在帮助中看不到/D(例如/?),我想我可能把它复杂化了!我的一个问题是,我不希望今天,即使它将在那里被写入。前几天(完成后)。