2014-05-23 70 views
0

下面是我試圖解決的問題:每週一次將6個文本文件放在一個目錄中,每個文件的可變數量的記錄。我需要將這些文件分成5個其他文件(每個工作日一個文件)。所以在這個過程運行後,我將有30個文件。我希望這可以作爲計劃任務運行,這樣我就不必每週手動分割這些文件。根據Windows中的行數對文件進行均勻分割

例如: File One.txt有1000條記錄,所以它將被分割成File One A.txt(200條記錄),File One B.txt(200條記錄),File One C.txt(200條記錄) ,File One C.txt(200條記錄)和File One D.txt(200條記錄) 文件Two.txt可能有500條記錄,所以它會被分成5個100條記錄的文件。 (文件2 A.txt,文件2 B.txt等)

約束:我正在運行Windows Server 2008.我無法安裝任何額外的第三方實用程序,我不希望編譯該解決方案或安裝一切。如果可能的話,我更喜歡它是批處理文件。

我在這裏看到了其他的例子,看文件中的字符串,但是這與內容無關。謝謝你的幫助!

+0

如果您的文件有1001行,該怎麼辦?你將如何劃分它? – foxidrive

+0

你想如何分割文件?前200個記錄進入第一個文件,第二個200個記錄等等?還是你想交替分配行,例如文件1有1,6,11行等?要麼...?這和這周的幾天有什麼關係? – dbenham

+1

文件如何拆分並不重要。無論最簡單的工作都可以。每個輸出文件中的行數不必完全相同,因此如果文件爲201,200,200,200,200則沒問題。如果你把第一個200放在第一個文件中,或者如果你將它們分成卡片,那沒關係。 – user3669032

回答

0

這是未經測試:

@echo off 
setlocal EnableDelayedExpansion 

rem Create destination folder 
md SplittedFiles 2>NUL 
rem Process the 6 files 
for %%a in (*.txt) do (
    rem Count number of records in this file 
    for /F %%b in ('find /C /V "" ^< "%%a"') do set records=%%b 
    rem Get Records per file and remaining records 
    set /A recsPerFile=records/5, remaining=recsPerFile*5+1 
    rem Split this file in 5 parts 
    < "%%a" (
     for %%b in (A B C D E) do (
     (for /L %%c in (1,1,!recsPerFile!) do (
      set "record=" 
      set /P record= 
      echo(!record! 
     )) > "SplittedFiles\%%~Na %%b.txt" 
    ) 
     rem Add remaining records to last part, if any 
     (for /L %%c in (!remaining!,1,!records!) do (
     set "record=" 
     set /P record= 
     echo(!record! 
    )) >> "SplittedFiles\%%~Na E.txt" 
    ) 
) 

上一頁程序將修改可能有驚歎號記錄;如果需要,這一點可能是固定的。

+0

初始測試是完美的!我會繼續測試。非常感謝你Aacini! – user3669032

+0

您可以將此答案標記爲「最佳答案」,這表明此問題已得到解答並給我一些重要點;當你有足夠的代表點時,你也可以稍後提出這個答案...... – Aacini