2010-08-24 75 views
1

我想編寫一個包含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

這就是我想要的要做到:
複製所有文件與不已經在Directory2 存在除了對於最近在directory1中創建的* .bin文件擴展名是* .bin文件在directory1中。所以這應該被複制到Directory2唯一的文件是:
FileC.bin - 複製,因爲它是一個bin文件,這不是又在Directory2
File8.bin - 複製,因爲它是一個bin文件,這不是又在Directory2

下列文件應被複制到Directory2:
FILE2.TXT - 擴展錯,所以不要將它複製
File2.DAT的 - 擴展錯,所以不要將它複製
FileA.bin - 早在Directory2存在所以不要將它複製
FileQ.bin - 在Directory2所以d已存在on't copy it
File2.bin - 最近的* .bin文件,所以不要複製它

感謝您的任何幫助!

+0

是VBScript或PowerShell還出來嗎? – Fionnuala 2010-08-24 13:18:57

+0

我不確定...該任務必須從Windows調度程序運行在另一個人的機器上,他是一位初級程序員,但熟悉批處理文件。一旦我給他這個批處理文件,他需要能夠編輯它,如果任務改變(例如,如果他改變了Directory1和Directory2的名字)。 – KAE 2010-08-24 20:23:07

回答

0

您可以使用DIR *.bin /o-d /b > Files.txt來獲取的bin文件列表排序最近持續。在兩個文件夾(分離輸出文件)上執行此操作,然後設置一個FOR循環(可能是兩個嵌套的FOR循環)來遍歷這兩個文件,挑選要複製的文件(對日期中的第一個文件進行特殊處理 - 有序列表),並從循環中複製它們。傻詭計將通過設置屬性設置完成,然後使用XCOPY /M同時複製它們,但這似乎過分挑剔。

我總是發現FOR循環是一個壞蛋,如果你能找到一個非批處理文件的方式,或者某種形式的第三方插件來幫助你,那麼你就會在遊戲之前。

+0

非常有幫助,謝謝。如果我得到它的工作,我會發布代碼。 – KAE 2010-08-25 14:40:08

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 
+0

可能有太多評論;在這裏,你沒有太多的評論。將DOS對象(文件夾,文件)嵌入到「引號」中以處理空格,但是三重檢查所有內容以確保正確無誤。否則,看起來很好,我! – 2010-08-26 13:50:25

相關問題