我想写一个包含DOS命令的批处理文件(遗憾的是perl或其他语言不是一个选项)来执行以下任务。
在一个目录(c:\ MyData \ Directory1)中有以下文件:
FILE2.TXT
File2.DAT的
FileA.bin
FileQ.bin
FileC.bin
File8.bin
File2.bin
这些文件都有不同的创建日期。在此示例中,最近创建的* .bin文件是File2.bin,但它可以是任意随机命名的* .bin文件。
在另一个目录(c:\ MyData \ Directory2)中有以下文件:
FILE2.TXT
File2.DAT的
FileA.bin
FileQ.bin
这是我想做的事:
复制Directory1中扩展名为* .bin但Directory2 中除之外的所有文件,以便在Directory1中最近创建的* .bin文件。因此,应该复制到Directory2的唯一文件是:
FileC.bin - 复制,因为它是一个尚未在Directory2中的bin文件
File8.bin - 复制,因为它是一个尚未在Directory2中的bin文件
以下文件应不复制到Directory2中:
File2.txt - 错误的扩展名,所以不要复制它
File2.dat - 错误的扩展名,所以不要复制它
FileA.bin - 已存在于Directory2中,因此请勿复制它
FileQ.bin - 已存在于Directory2中,因此请勿复制它
File2.bin - 最近的* .bin文件,所以不要复制它
感谢您的帮助!
答案 0 :(得分:3)
@echo off
@rem Sorry for excessive commenting - I am a batch file newbie
@rem Batch file will not work if there are spaces in names of directory or copied files
@rem Next line allows for/do loop to work correctly
setlocal enabledelayedexpansion
@rem Make temporary file that lists files from newest to oldest
DIR /o-d /b c:\temp\Directory1\*.bin > FileList.txt
@rem Counter will be used to avoid copying newest file which is listed first
set /A Counter=1
@rem Read in names of all files with chosen extension in the first directory
@rem Names will be stored in the variable %%a
for /F "delims=" %%a in (C:\temp\FileList.txt) do (
@rem Increment the counter
set /A Counter+=1
@rem Only copy files that are not the most recent one, so Counter>1
@rem Requires the exclamation points because this is a string not number comparison
if !Counter! gtr 1 (
@rem If the file does not already exist in Directory2, copy it
if not exist C:\temp\Directory2\%%a (
echo Copying C:\temp\Directory1\%%a to C:\temp\Directory2\%%a
copy C:\temp\Directory1\%%a C:\temp\Directory2\%%a
)
)
)
@rem Remove the temporary file
del FileList.txt
答案 1 :(得分:0)
您可以使用DIR *.bin /o-d /b > Files.txt
获取最近订购的bin文件列表。在两个文件夹上执行此操作(分隔输出文件),然后设置FOR循环,可能是两个嵌套的FOR循环,通过这两个文件,挑选要复制的文件(对日期中的第一个文件进行特殊处理) - 订购列表),并从循环中复制它们。愚蠢的技巧将通过设置属性设置然后使用XCOPY /M
同时复制它们来完成,但这似乎过于繁琐。
我总是发现FOR循环是一个脾气暴躁的野兽,如果你能找到非批处理文件的方式,或者某种形式的第三方插件来帮助你,你就会领先于游戏。 / p>
答案 2 :(得分:0)
我的机器上没有Robocopy,否则我会做/?告诉你但我记得它有更多功能(特别是wrt时间戳)。这是一个Windows工具。 http://en.wikipedia.org/wiki/Robocopy