根据Windows中的行数平均分割文件

时间:2014-05-23 13:19:51

标签: batch-file

以下是我试图解决的问题:每周一次将6个文本文件放在一个目录中,每个文件都有可变数量的记录。我需要将每个文件分成5个其他文件(每个工作日一个)。因此,在此过程运行后,我将有30个文件。我希望这可以作为计划任务运行,这样我就不必每周手动拆分这些文件。

实施例: 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条记录的文件。 (文件二A.txt,文件二B.txt等)

约束:我正在运行Windows Server 2008.我无法安装任何其他第三方实用程序,我也不想编译解决方案或安装任何东西。如果可能的话,我更喜欢它是一个批处理文件。

我在这里看到了其他示例,查看文件中的字符串,但这与内容无关。谢谢你的帮助!

1 个答案:

答案 0 :(得分: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"
   )
)

以前的程序会修改可能带有感叹号的记录;如果需要,这一点可以修复。