Объединение файлов из разных папок

Russian main discussion
Post Reply
  • Author
  • Message
Wio
Offline
Posts: 76
Joined: Wed Jan 05, 2011 6:07 am

Объединение файлов из разных папок

Post by Wio »

Есть две папки: "ABC" и "DEF". В них хранится одинаковое количество файлов с идентичными именами. К примеру:

ABC:
File1.txt
File2.txt
...

DEF:
File1.txt
File2.txt
...

Кодировки и содержимое всех файлов различны. Нужно склеить файлы с одинаковыми именами между собой:

XYZ:
File1.txt = File1.txt (из папки ABC) + File1.txt (из папки DEF)
File2.txt = File2.txt (из папки ABC) + File2.txt (из папки DEF)
...

Подскажите, как это можно сделать в AkelPad? Объединить командой copy не получится из-за разницы кодировок.

Wio
Offline
Posts: 76
Joined: Wed Jan 05, 2011 6:07 am

Post by Wio »

Отвечаю сам себе :wink: Возможно, кому-нибудь ещё пригодится мой способ. Буду рад, если подскажите альтернативный путь.

Решение: нужно привести все файлы к единой кодировке UTF-8 (без BOM) с помощью AkelPad в режиме MDI/PMDI. Далее файлы склеиваются bat-ником с помощью команды copy. Примерно так:

Code: Select all

for /f "delims=" %%t in ('dir /b ABC\*.txt') do (
	copy /b ABC\%%t + DEF\%%t XYZ\%%t
)

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Re: Объединение файлов из разных папок

Post by KDJ »

Wio wrote:Подскажите, как это можно сделать в AkelPad?
Script for AkelPad:

Code: Select all

var aFolder = ["C:\\Test\\abc\",
               "C:\\Test\\def\",
               "C:\\Test\\xyz\"];
var nCP  = 1200 /*UTF-16LE*/; //code page for WriteFile()
var bBOM = true;

var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var oEnum;
var sName;
var sContent;
var i;

for (i = 0; i < 3; ++i)
{
  if (! oFSO.FolderExists(aFolder[i]))
  {
    WScript.Echo(aFolder[i] + "\nFolder does not exist!");
    WScript.Quit();
  }
}

oEnum = new Enumerator(oFSO.GetFolder(aFolder[0]).Files);

for (i = 0; ! oEnum.atEnd(); ++i, oEnum.moveNext())
{
  sName    = oFSO.GetFileName(oEnum.item());
  sContent = AkelPad.ReadFile(aFolder[0] + sName, 0x1D /*ADT_NOMESSAGES|ADT_DETECTBOM|ADT_DETECTCODEPAGE|ADT_BINARYERROR*/) +
             AkelPad.ReadFile(aFolder[1] + sName, 0x1D /*ADT_NOMESSAGES|ADT_DETECTBOM|ADT_DETECTCODEPAGE|ADT_BINARYERROR*/);

  AkelPad.WriteFile(aFolder[2] + sName, sContent, sContent.length, nCP, bBOM);
}

WScript.Echo("Saved files: " + i);

Wio
Offline
Posts: 76
Joined: Wed Jan 05, 2011 6:07 am

Post by Wio »

KDJ
Thank you so much, it works perfectly! This is even more versatile method than joining text with bat-file. Your script can be adapted for different file concatenation tasks.

Перевод:
Большое спасибо, всё отлично работает! Это даже более универсальный метод, чем склеивать текст bat-ником. Ваш скрипт можно адаптировать для различных вариантов соединения файлов.
Post Reply