View previous topic :: View next topic |
Author |
Message |
Zorroz
Joined: 16 Dec 2004 Posts: 308 Location: Россия, Иркутская обл., г. Ангарск
|
(Separately) Posted: Fri Nov 25, 2005 09:15 Post subject: Содержание файлов записать в один файл |
|
|
Имеется папка которая содержит список текстовых фалов.
В ЗЕМЛЯНКЕ.txt
ВЕРОНИКЕ ТУШНОВОЙ И АЛЕКСАНДРУ ЯШИНУ.txt
ВЕРХОВНЫЙ СУД.txt
ВЕРЮ ГЕНИЮ САМОМУ.txt
ВЕСЕЛЬЕ РУСИ.txt
и т.д.
Нужно весь текст из этих файлов записать в один + имя файла, примерно вот так:
В ЗЕМЛЯНКЕ
текст стихотворения
ВЕРОНИКЕ ТУШНОВОЙ И АЛЕКСАНДРУ ЯШИНУ
текст стихотворения
ВЕРХОВНЫЙ СУД
текст стихотворения
Можно как то это все автоматизировать, а то в ручную это займет много времени.
! | Avada: | 30.07.10. Тема перенесена из "Секретов и советов" в "Автоматизацию". | |
|
Back to top |
|
|
Bomm
Joined: 15 Jan 2005 Posts: 245 Location: Москва
|
(Separately) Posted: Fri Nov 25, 2005 11:05 Post subject: |
|
|
Создать 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 |
|
|
Zorroz
Joined: 16 Dec 2004 Posts: 308 Location: Россия, Иркутская обл., г. Ангарск
|
(Separately) Posted: Fri Nov 25, 2005 11:29 Post subject: |
|
|
Спасибо конечно. Ну а если количество файлов переваливает за сотню и их количество все время растет, хотелось бы другой способ. Тема открыта. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2221 Location: Москва, Россия
|
(Separately) Posted: Fri Nov 25, 2005 12:16 Post subject: |
|
|
Zorroz
Можно средствами TC копировать соджержимое файлов с одним расширением в один.
Выделяешь файлы -> F5 -> Вводишь маску: <имя нового файла>.* -> Enter -> n-ное количество раз нажать "Дописать".
Здесь n - количество твоих файлов минус 1.
Следует обратить внимание, что в маске должны присутствовать неопределенные символы, иначе TC ругнется, что нельзя скопировать несколько файлов в один. Т.е. лучше в маске на месте расширения поставить *, если у тебя все файлы одного расширения.
При этом способе соответственно в конечный файл не попадут имена файлов, как ты хочешь.
В принципе, этот способ можно реализовать батником, только я не силен в написании их.
Могу предложить скрипт на VBScript. Его можно будет запускать, как обычный батник. |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6159 Location: Москва
|
(Separately) Posted: Fri Nov 25, 2005 13:06 Post subject: |
|
|
Если для файлов, которые нужно запихать в общий текстовик, существует какое-то общее выражение, то это можно сделать батником очень быстро и просто. Вот пример для объединения всех текстовых файлов из текущего каталога.
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 не должен быть в текущем каталоге, иначе он тоже может попытаться добавиться к себе самому! Что при этом произойдёт, я не знаю, лень пробовать. ) |
|
Back to top |
|
|
Zorroz
Joined: 16 Dec 2004 Posts: 308 Location: Россия, Иркутская обл., г. Ангарск
|
(Separately) Posted: Fri Nov 25, 2005 14:15 Post subject: |
|
|
2CaptainFlint
Батник выполняется, но в file.txt ничего не пишется кроме %i.
2Batya
Quote: | Могу предложить скрипт на VBScript. |
Хотелось бы.
Навсякий случай еще раз уточню задачу. В папке имеется список стихотворений формата {Название стихотворения}.txt, а внутри сам текст стихотворения. Нужно на выходе получить файл, в котором бы содержались все стихотворения с названиями. Например имеется папка Эдуард Асадов. В ней находиться много стихотворений:
МОЕЙ МАМЕ.txt
МОЕМУ СТАРОМУ ДРУГУ БОРИСУ ШПИЦБУРГУ.txt
МОЯ ЗВЕЗДА.txt
МОЯ ЛЮБОВЬ.txt
и т.д.
Я хочу на выходе получить файл следующего содержания:
{Название стихотворения}
{пустая строчка - разделитель}
{Текст стихотворения}
{пустая строчка - разделитель}
т.е. файл Stixotvorenie.txt будет иметь следующий вид:
МОЕЙ МАМЕ
{Текст стихотворения}
МОЕМУ СТАРОМУ ДРУГУ БОРИСУ ШПИЦБУРГУ
{Текст стихотворения}
МОЯ ЗВЕЗДА
{Текст стихотворения}
МОЯ ЛЮБОВЬ
{Текст стихотворения}
Это возможно реализовать? |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6159 Location: Москва
|
(Separately) Posted: Fri Nov 25, 2005 14:22 Post subject: |
|
|
Zorroz
А у меня всё нормально выполняется... Какая ОС? У меня XP SP2. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2221 Location: Москва, Россия
|
(Separately) Posted: Fri Nov 25, 2005 15:33 Post subject: |
|
|
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 |
|
|
Zorroz
Joined: 16 Dec 2004 Posts: 308 Location: Россия, Иркутская обл., г. Ангарск
|
(Separately) Posted: Fri Nov 25, 2005 18:17 Post subject: |
|
|
CaptainFlint
У меня Win_98.
Batya
Сейчас буду пробовать. |
|
Back to top |
|
|
Zorroz
Joined: 16 Dec 2004 Posts: 308 Location: Россия, Иркутская обл., г. Ангарск
|
(Separately) Posted: Sat Nov 26, 2005 04:21 Post subject: |
|
|
Я правильно понял что должна быть раскаментирована одна строчка из 15-17? Пробую все 3 возможных варианта, но все время выдается одна и та же ошибка:
Сценарий: C:\totalcmd\Plugins\util\2.vbs
Строка: 13
Символ: 1
Ошибка: Путь не найден
Код: 800A004C
Источние: Ошибка выполнения Microsoft VBScript
Что делать, в чем ошибка. |
|
Back to top |
|
|
vserd
Joined: 26 Apr 2005 Posts: 118
|
(Separately) Posted: Sat Nov 26, 2005 14:53 Post subject: |
|
|
Zorroz
И не будет работать. Этот батник использует расширение доступное в NT и выше. |
|
Back to top |
|
|
Zorroz
Joined: 16 Dec 2004 Posts: 308 Location: Россия, Иркутская обл., г. Ангарск
|
(Separately) Posted: Sat Nov 26, 2005 17:43 Post subject: |
|
|
А как тогда быть? Есть ли какой то способ сделать мне нужные действия под Win_98. |
|
Back to top |
|
|
Zorroz
Joined: 16 Dec 2004 Posts: 308 Location: Россия, Иркутская обл., г. Ангарск
|
(Separately) Posted: Sun Nov 27, 2005 13:46 Post subject: |
|
|
Сходил к другу, у него стоит ХР. Но скрипт выдает туже самую ошибку. |
|
Back to top |
|
|
Zorroz
Joined: 16 Dec 2004 Posts: 308 Location: Россия, Иркутская обл., г. Ангарск
|
(Separately) Posted: Sun Nov 27, 2005 15:54 Post subject: |
|
|
Batya
Данный скрипт заработал, после того как я в параметрах кнопки указал «%p» вместо «%P». Но стихи(они же файлы) сортируются не по алфавиту, и у названия стихотворения стоит «.txt» Как можно сделать чтобы они сортировались по алфавиту(т.е. также как видны файлы в панели) и как избавиться от «.txt» после названия стихотворения. |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Sun Nov 27, 2005 19:12 Post subject: |
|
|
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 |
|
|
|