批处理脚本复制文件

问题描述:

我在尝试创建批处理脚本以将文件从源A复制到源B时遇到问题,但需要按文件大小大于1KB的日期复制最新的文件。它还需要从源A复制文件并覆盖源B中的文件。批处理脚本复制文件

我使用下面的脚本作为示例,说明如何设置它。

XCOPY E:\ sourceA \ testA_ */DA C:\ sourceB \ TestB.txt/Y

我不知道如何添加命令来获取文件大于1KB大。任何帮助,将不胜感激。抱歉的脚本不是我的事情,也不是新事物。

+0

不要使用.bat文件。尝试Perl,Windows脚本宿主或Powershell。或者编写一个C#或VB.Net程序。但.bat文件只是太原始,除了你已经拥有的东西外,不能做任何事情。恕我直言... – paulsm4 2012-04-24 23:21:32

+0

使用XCopy无法检查文件大小。您可以使用PowerShell脚本执行此操作,但XCopy没有考虑文件大小的功能。 – 2012-04-24 23:23:25

+0

嗯好吧...猜我会研究PowerShell脚本。这个新东西。感谢您的建议。非常感谢 – JayC1980 2012-04-24 23:35:45

我不知道我完全理解你的要求,但我认为这是你问什么

@echo off 
pushd "E:\sourceA" 
for /f "eol=: delims=" %%F in ('dir /a-d /b /o-d "testA_*"') do (
    if %%~zF geq 1024 (
     copy /y "%%F" "C:\sourceB\TestB.txt" 
     goto :break 
    ) 
) 
:break 

如果你只是想复制一个文件,如果它有存档属性,且仅当它比现有的TestB.txt新,则

@echo off 
pushd "E:\sourceA" 
for /f "eol=: delims=" %%F in ('dir /aa-d /b /o-d "testA_*"') do (
    if %%~zF geq 1024 (
     echo f|xcopy /dy "%%F" "C:\sourceB\TestB.txt" 
     goto :break 
    ) 
) 
:break 
+0

dbbenham感谢您的帮助,但是我要求的是从源文件A中复制大小大于2kb的最新文件到文件大小,进入source_B覆盖text_B – JayC1980 2012-04-26 23:09:09

+0

大于1kb,如在您的问题中,或2kb如您的评论?另外,目标文件夹中只能有一个文件被命名为text_B;所以我不明白复制多个文件覆盖单个文件的概念。我发布的答案将复制最新的文件并覆盖text_B。也许如果您要编辑您的问题,并在源代码和目标文件夹(包括时间戳和文件大小)的前后列出您的假想列表,那么您的要求将会很清楚。 – dbenham 2012-04-26 23:20:30

+0

对不起复制大于1kb的文件。我想从一个目录复制最新的文件以覆盖驻留在另一个目录中的现有文件。不复制多个文件只是存在的最新的文件。希望澄清它。 – JayC1980 2012-04-27 00:15:37

@Echo OFF 
Setlocal enabledelayedexpansion 

:: By Elektro [email protected] 
:: 
:: Copy the Newest file in a folder greater than X bytes to a destination directory. 
:: You maybe want to modify these variables: 
:: 
Set "Source=%CD%" 
Set "Destination=C:\Test\" 
Set "Size=1024" 
:: :: :: :: :: :: :: :: :: 

for /F "tokens=1-4 delims=;" %%a in ('forfiles /P "%SOURCE%" /C "cmd /c echo @fdate;@ftime;@fsize;@path"') do (
    If %%c GTR %SIZE% (
     Set DAY=%%a 
     Set DAY=!DAY:/=! 
     Set HOUR=%%b 
     Set HOUR=!HOUR::=! 
     Echo !DAY!!HOUR!;%%d >> "%TEMP%\NewestFile.txt" 
    ) 
) 

for /F "tokens=2 delims=;" %%# in ('Type "%TEMP%\NewestFile.txt" ^| Sort /R') do (
    Copy /Y %%# "%Destination%" 1>NUL 
    Del /Q "%TEMP%\NewestFile.txt" 
    Exit 
)