用于复制已修改文件的Windows脚本

时间:2015-11-04 12:10:17

标签: windows file copy

我尝试编写一个脚本,将修改后的文件从我的开发环境复制到桌面文件夹,但它会复制所有文件,而不仅仅是修改过的文件。这是脚本:

set codeFolder=C:\Dev\tsg-bto-apps-lt-pc-trunk

FOR /F "TOKENS=1 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET dayOfWeek=%%A
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET dd=%%B
FOR /F "TOKENS=1,2,3 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%C
FOR /F "TOKENS=1,2,3,4 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET yyyy=%%D

SET today=%dd%-%mm%-%yyyy%

Xcopy /Y /D:%today% /I %codeFolder%\bin C:\Users\sheaffer\Desktop\testFolder  

方法如下:

  1. 获取今天的日期(我使用了以下链接中第二个答案中显示的方法:Windows batch: formatted date into variable)。

  2. 将Xcopy与/ D标志一起使用(以下链接中有一个示例:http://www.windows-commandline.com/xcopy-command-syntax-examples/

  3. 我看不出我做错了什么。结果是我的bin文件夹中的所有文件都被复制,而不仅仅是今天修改过的文件。当我运行脚本时,生成的命令是:

    Xcopy /Y /D:04-11-15 /I C:\Dev\tsg-bto-apps-lt-pc-trunk\bin C:\Users\sheaffer\Desktop\testFolder

    请帮我理解我的错误。谢谢。

2 个答案:

答案 0 :(得分:0)

我接受了Filburt的建议并使用了robocopy而不是xcopy,它起作用了。新脚本更简单,因为我可以使用/maxage:1并避免字符串/日期操作。

set codeFolder=C:\Dev\tsg-bto-apps-lt-pc-trunk

robocopy %codeFolder%\bin C:\Users\sheaffer\Desktop\testFolder /MAXAGE:1

答案 1 :(得分:0)

xcopy的帮助表示/ D日期格式为m-d-y,您的日期格式为d-m-y。您要复制所有在2015年4月11日或之后更改的文件。此外,robocopy优于xcopy。非常长的路径名称会使xcopy绊倒