【问题标题】:Batch file that takes the file for the previous day only and copy it elsewhere仅获取前一天的文件并将其复制到其他地方的批处理文件
【发布时间】:2013-03-22 16:28:26
【问题描述】:

好的,所以我做了一些研究,但在这里遇到了一些障碍。我想要做的是,(使用事件调度程序)每天运行一个批处理,它只获取前一天的“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

提前感谢您的帮助。

强尼

【问题讨论】:

    标签: scripting batch-file copy


    【解决方案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 仅复制新文件或更新文件。

    (按理说 ...etc... 是所需路径名的其余部分 - DOS 不是通灵的)

    【讨论】:

    • 真的很有帮助,非常感谢。在帮助中看不到/D(例如/?)以为我可能过于复杂了!我遇到的一个问题是我不想要今天,即使它会在那里被写入。就在前几天(一旦完成)。
    【解决方案2】:

    要在命令行中包含特殊字符,请使用 0xHH 格式的字符的十六进制代码(例如 0x09 是 TAB 字符,0x22 是双引号 " 字符。)因此 "C:\Program Files\" 变为 ^ 0x22C:\Program^ 文件\^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
    

    为了便于阅读,我已将其分成多行,但您可能希望将其放回一行。

    【讨论】:

    • 您好,感谢您的帮助,抱歉,我似乎无法让它工作,可能会误导您。我的问题不是双引号,我的文件没有双引号。我的问题是我似乎无法使逻辑起作用。我似乎无法获得前一天的信息,而且我似乎无法复制文件。
    【解决方案3】:

    这看起来很可疑-:

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

    对吗?

    【讨论】:

      猜你喜欢
      • 2010-12-09
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多