2012-01-24 4 views
0

У меня около 1000 текстовых файлов по 350 КБ каждый. Файлы называются part0001 для part1000. Все они присутствуют в одном каталоге. Мне нужно написать пакетный скрипт, чтобы объединить 50 файлов для создания одного файла. Я знаю, что мы можем использовать команду «type» для конкатенации файлов и «для» команды для итерации файлов, но я не могу найти подходящее решение. Любая помощь будет высоко оценена.Преобразование большого количества небольших файлов в небольшое количество больших файлов в Windows

Я хочу что-то вроде:

combine <number_files_to_cimbine_into_one> <soure_directory> <output_directory> 
+0

Нет пробелов. Поэтому я хотел объединить первые 50 в один файл, а затем 50 в второй файл и так далее ... – Amar

ответ

2

Это собирает .txt файлы в группы 10. Это на самом деле не добавляет их; он отображает сообщение о том, что нужно добавить где.

@echo off 
setlocal EnableDelayedExpansion 

REM outcount is the current output file 
set outcount=1 
REM groupcount is the number of files seen in the current group 
set groupcount=0 

for %%I in (*.txt) do (
    if !groupcount!==10 (
    set /A outcount=!outcount!+1 
    set groupcount=0 
) 
    echo Append %%I to combinedFile!outcount! 
    set /A groupcount=!groupcount!+1 
) 
+1

Спасибо @arx, что действительно помогло. Я отредактировал ваш ответ, чтобы иметь точное решение проблемы. – Amar

1

Это должно работать для вас, занимает 3 арг так же, как вы просили, и выгружает содержимое в out.txt в вашем Dest реж.

@echo off 
setlocal enabledelayedexpansion 
set TOTALFILECOUNT=%1 
set FROMDIR=%2 
set TODIR=%3 
set OUTFILENAME="%TODIR%\out.txt" 
set COUNTER=0 

FOR /f "tokens=*" %%A IN ('DIR /B "%FROMDIR%\*.txt"') DO (
    SET /a COUNTER+=1 
    type %FROMDIR%\%%A >> %OUTFILENAME% 
    if !COUNTER!==%TOTALFILECOUNT% GOTO :EOF 
) 
endlocal 
+0

Спасибо @george, это изящно :) – Amar

Смежные вопросы