Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Содержание файлов записать в один файл
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Zorroz



Joined: 16 Dec 2004
Posts: 308
Location: Россия, Иркутская обл., г. Ангарск

Post (Separately) Posted: Fri Nov 25, 2005 09:15    Post subject: Содержание файлов записать в один файл Reply with quote

Имеется папка которая содержит список текстовых фалов.
В ЗЕМЛЯНКЕ.txt
ВЕРОНИКЕ ТУШНОВОЙ И АЛЕКСАНДРУ ЯШИНУ.txt
ВЕРХОВНЫЙ СУД.txt
ВЕРЮ ГЕНИЮ САМОМУ.txt
ВЕСЕЛЬЕ РУСИ.txt
и т.д.
Нужно весь текст из этих файлов записать в один + имя файла, примерно вот так:

В ЗЕМЛЯНКЕ

текст стихотворения

ВЕРОНИКЕ ТУШНОВОЙ И АЛЕКСАНДРУ ЯШИНУ

текст стихотворения

ВЕРХОВНЫЙ СУД

текст стихотворения

Можно как то это все автоматизировать, а то в ручную это займет много времени.

 !  Avada:
30.07.10. Тема перенесена из "Секретов и советов" в "Автоматизацию".
Back to top
View user's profile Send private message
Bomm



Joined: 15 Jan 2005
Posts: 245
Location: Москва

Post (Separately) Posted: Fri Nov 25, 2005 11:05    Post subject: Reply with quote

Создать BAT-файл примерно такой:
------------------------------------------
echo В ЗЕМЛЯНКЕ > file.txt
echo. >> file.txt
type "В ЗЕМЛЯНКЕ.txt" >> file.txt
echo. >> file.txt
echo ВЕРОНИКЕ ТУШНОВОЙ И АЛЕКСАНДРУ ЯШИНУ >> file.txt
type "ВЕРОНИКЕ ТУШНОВОЙ И АЛЕКСАНДРУ ЯШИНУ".txt >> file.txt
echo. >> file.txt
-------------------------------------------
и т.д.
echo. - это пустая строка
Back to top
View user's profile Send private message
Zorroz



Joined: 16 Dec 2004
Posts: 308
Location: Россия, Иркутская обл., г. Ангарск

Post (Separately) Posted: Fri Nov 25, 2005 11:29    Post subject: Reply with quote

Спасибо конечно. Ну а если количество файлов переваливает за сотню и их количество все время растет, хотелось бы другой способ. Тема открыта.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Fri Nov 25, 2005 12:16    Post subject: Reply with quote

Zorroz
Можно средствами TC копировать соджержимое файлов с одним расширением в один.
Выделяешь файлы -> F5 -> Вводишь маску: <имя нового файла>.* -> Enter -> n-ное количество раз нажать "Дописать".
Здесь n - количество твоих файлов минус 1.
Следует обратить внимание, что в маске должны присутствовать неопределенные символы, иначе TC ругнется, что нельзя скопировать несколько файлов в один. Т.е. лучше в маске на месте расширения поставить *, если у тебя все файлы одного расширения.
При этом способе соответственно в конечный файл не попадут имена файлов, как ты хочешь.
В принципе, этот способ можно реализовать батником, только я не силен в написании их.

Могу предложить скрипт на VBScript. Его можно будет запускать, как обычный батник.
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Fri Nov 25, 2005 13:06    Post subject: Reply with quote

Если для файлов, которые нужно запихать в общий текстовик, существует какое-то общее выражение, то это можно сделать батником очень быстро и просто. Вот пример для объединения всех текстовых файлов из текущего каталога.
Code:
for %%i in (*.txt) do (
  echo %%i >> C:\file.txt
  echo. >> C:\file.txt
  type %%i >> C:\file.txt
  echo. >> C:\file.txt
)

(Файл file.txt не должен быть в текущем каталоге, иначе он тоже может попытаться добавиться к себе самому! Что при этом произойдёт, я не знаю, лень пробовать. Smile )
Back to top
View user's profile Send private message
Zorroz



Joined: 16 Dec 2004
Posts: 308
Location: Россия, Иркутская обл., г. Ангарск

Post (Separately) Posted: Fri Nov 25, 2005 14:15    Post subject: Reply with quote

2CaptainFlint
Батник выполняется, но в file.txt ничего не пишется кроме %i.

2Batya
Quote:
Могу предложить скрипт на VBScript.

Хотелось бы.
Навсякий случай еще раз уточню задачу. В папке имеется список стихотворений формата {Название стихотворения}.txt, а внутри сам текст стихотворения. Нужно на выходе получить файл, в котором бы содержались все стихотворения с названиями. Например имеется папка Эдуард Асадов. В ней находиться много стихотворений:

МОЕЙ МАМЕ.txt
МОЕМУ СТАРОМУ ДРУГУ БОРИСУ ШПИЦБУРГУ.txt
МОЯ ЗВЕЗДА.txt
МОЯ ЛЮБОВЬ.txt
и т.д.

Я хочу на выходе получить файл следующего содержания:
{Название стихотворения}
{пустая строчка - разделитель}
{Текст стихотворения}
{пустая строчка - разделитель}
т.е. файл Stixotvorenie.txt будет иметь следующий вид:
МОЕЙ МАМЕ

{Текст стихотворения}

МОЕМУ СТАРОМУ ДРУГУ БОРИСУ ШПИЦБУРГУ

{Текст стихотворения}

МОЯ ЗВЕЗДА

{Текст стихотворения}

МОЯ ЛЮБОВЬ

{Текст стихотворения}

Это возможно реализовать?
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Fri Nov 25, 2005 14:22    Post subject: Reply with quote

Zorroz
А у меня всё нормально выполняется... Какая ОС? У меня XP SP2.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Fri Nov 25, 2005 15:33    Post subject: Reply with quote

Zorroz
Создай файл *.vbs с содержимым:
Code:
'===============================================================
' Формирование файла с содержимым всех файлов текущего каталога

' В параметрах вызова из TC должно быть прописано:
' %P
'===============================================================

Option Explicit
Dim FSO, CurrentDirObj, NewFileOpen, DirFiles
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim CurrentDir, NewFile, Path_NewFile, ScanFile, M1
CurrentDir = WScript.Arguments(0)
Set CurrentDirObj = FSO.GetFolder(CurrentDir)
NewFile = CurrentDirObj.Name & ".txt"
Path_NewFile = CurrentDir & NewFile
'Path_NewFile = CurrentDirObj.ParentFolder & "\" & NewFile
'Path_NewFile = "C:\Стихи\" & NewFile
If FSO.FileExists(Path_NewFile) Then
  M1 = MsgBox("Файл " & Path_NewFile & " уже существует.", vbOKOnly + vbExclamation, "Внимание!")
  Wscript.Quit
End If
Set DirFiles = CurrentDirObj.Files
Set NewFileOpen = FSO.CreateTextFile(Path_NewFile)
For Each ScanFile in DirFiles
  If StrComp(ScanFile, Path_NewFile, 1) <> 0 Then
    With NewFileOpen
      .WriteLine "================================"
      .WriteLine FSO.GetFileName(ScanFile)
      .WriteLine "--------------------------------"
      .WriteLine
      .Write FSO.OpenTextFile(ScanFile, 1).ReadAll
      .WriteLine
      .WriteLine
      .WriteLine
      .WriteLine
    End With
  End If
Next
NewFileOpen.Close
M1 = MsgBox("Создан файл " & Path_NewFile & " с содержимым папки " & CurrentDir, vbOKOnly + vbInformation, "Результат")
Set FSO = Nothing
Set CurrentDirObj = Nothing
Set NewFileOpen = Nothing
Set DirFiles = Nothing
Wscript.Quit

Повесь файл на кнопку в TC. В параметрах кнопки укажи %P.
В зависимости от месторасположения нового файла закомментируй\ раскомментируй строки 15 - 17. Свой путь можешь указать как в строке 17. Имя же нового файла - название папки, расширение - txt (изменить можно в строке 14).
Формировать файл можешь по-своему добавив\ удалив строки .WriteLine. После .WriteLine можешь указывать любой текст в двойных кавычках.
Back to top
View user's profile Send private message
Zorroz



Joined: 16 Dec 2004
Posts: 308
Location: Россия, Иркутская обл., г. Ангарск

Post (Separately) Posted: Fri Nov 25, 2005 18:17    Post subject: Reply with quote

CaptainFlint

У меня Win_98.

Batya
Сейчас буду пробовать.
Back to top
View user's profile Send private message
Zorroz



Joined: 16 Dec 2004
Posts: 308
Location: Россия, Иркутская обл., г. Ангарск

Post (Separately) Posted: Sat Nov 26, 2005 04:21    Post subject: Reply with quote

Я правильно понял что должна быть раскаментирована одна строчка из 15-17? Пробую все 3 возможных варианта, но все время выдается одна и та же ошибка:

Сценарий: C:\totalcmd\Plugins\util\2.vbs
Строка: 13
Символ: 1
Ошибка: Путь не найден
Код: 800A004C
Источние: Ошибка выполнения Microsoft VBScript

Что делать, в чем ошибка.
Back to top
View user's profile Send private message
vserd



Joined: 26 Apr 2005
Posts: 118

Post (Separately) Posted: Sat Nov 26, 2005 14:53    Post subject: Reply with quote

Zorroz
Quote:
У меня Win_98.

И не будет работать. Этот батник использует расширение доступное в NT и выше.
Back to top
View user's profile Send private message
Zorroz



Joined: 16 Dec 2004
Posts: 308
Location: Россия, Иркутская обл., г. Ангарск

Post (Separately) Posted: Sat Nov 26, 2005 17:43    Post subject: Reply with quote

А как тогда быть? Есть ли какой то способ сделать мне нужные действия под Win_98.
Back to top
View user's profile Send private message
Zorroz



Joined: 16 Dec 2004
Posts: 308
Location: Россия, Иркутская обл., г. Ангарск

Post (Separately) Posted: Sun Nov 27, 2005 13:46    Post subject: Reply with quote

Сходил к другу, у него стоит ХР. Но скрипт выдает туже самую ошибку.
Back to top
View user's profile Send private message
Zorroz



Joined: 16 Dec 2004
Posts: 308
Location: Россия, Иркутская обл., г. Ангарск

Post (Separately) Posted: Sun Nov 27, 2005 15:54    Post subject: Reply with quote

Batya
Данный скрипт заработал, после того как я в параметрах кнопки указал «%p» вместо «%P». Но стихи(они же файлы) сортируются не по алфавиту, и у названия стихотворения стоит «.txt» Как можно сделать чтобы они сортировались по алфавиту(т.е. также как видны файлы в панели) и как избавиться от «.txt» после названия стихотворения.
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Sun Nov 27, 2005 19:12    Post subject: Reply with quote

Zorroz wrote:
Batya
Данный скрипт заработал, после того как я в параметрах кнопки указал «%p» вместо «%P». Но стихи(они же файлы) сортируются не по алфавиту, и у названия стихотворения стоит «.txt» Как можно сделать чтобы они сортировались по алфавиту(т.е. также как видны файлы в панели) и как избавиться от «.txt» после названия стихотворения.

Если бы указал %P в кавычках, то все бы работало нормально. Что касается нового запроса (ты ничего раньше не говорил о сортировке), то вот тебе другой вариант, который работает со списком выделенных файлов (а значит его можно приспособить и для использования с результатами поиска и brachview). Обрати внимание, что параметра теперь два и оба лучше написать в кавычках!
Code:
'===============================================================
' Формирование файла с содержимым выделенных
'  файлов на панели

' В параметрах вызова из TC должно быть прописано:
' "%P" "%L" (именно в кавычках!)
'===============================================================

Option Explicit
Dim FSO, NewFileOpen, DirFiles
Dim FileList, LstTS
Dim CurDirObj, Path_NewFile
Dim TS, ScanFile, CurrentDir

Set FSO = CreateObject("Scripting.FileSystemObject")
CurrentDir = WScript.Arguments(0)
FileList = WScript.Arguments(1)

Set CurDirObj = FSO.GetFolder(CurrentDir)

Path_NewFile = FSO.BuildPath(CurDirObj.Path, FSO.GetBaseName(CurDirObj) & ".txt")
If FSO.FileExists(Path_NewFile) Then
  Dim res
 
  If vbYes <> MsgBox("Файл " & Path_NewFile & " уже существует. Перезаписать его?", _
      vbYesNo + vbExclamation, "Внимание!") Then
     WScript.Quit
  End If
End If

Set LstTS = FSO.OpenTextFile(FileList, 1)
Set NewFileOpen = FSO.CreateTextFile(Path_NewFile, True)

Do While Not (LstTS.atEndOfStream)
    Set ScanFile = FSO.GetFile(LstTS.ReadLine)
    With NewFileOpen
      .WriteLine "================================"
      .WriteLine FSO.GetBaseName(ScanFile.Name)
      .WriteLine "--------------------------------"
      .WriteLine
      Set TS = ScanFile.OpenAsTextStream(1)
      .Write TS.ReadAll
      TS.Close
      .WriteBlankLines (4)
   End With
Loop

LstTS.Close
NewFileOpen.Close

MsgBox "Создан файл " & Path_NewFile & " с содержимым выделенных файлов.", _
       vbInformation, "Результат"

Set CurDirObj = Nothing
Set NewFileOpen = Nothing
Set TS = Nothing
Set LstTS = Nothing
Set FSO = Nothing

WScript.Quit
'===============================================================

Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group