2012-04-24 235 views
0

我在嘗試創建批處理腳本以將文件從源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

回答

1

我不知道我完全理解你的要求,但我認爲這是你問什麼

@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

0
@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 
)