| 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: 2229
 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: 6205
 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: 6205
 Location: Москва
 
 | 
			
				|  (Separately) Posted: Fri Nov 25, 2005 14:22    Post subject: |   |  
				| 
 |  
				| Zorroz А у меня всё нормально выполняется... Какая ОС? У меня XP SP2.
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Batya 
 
  
 Joined: 15 Dec 2004
 Posts: 2229
 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 |  | 
	
		|  | 
	
		|  |