| View previous topic :: View next topic | 
	
	
		| Author | Message | 
	
		| maxeon 
 
 
 Joined: 20 Nov 2007
 Posts: 5
 
 
 | 
			
				|  (Separately) Posted: Wed Jul 16, 2008 11:39    Post subject: Удаление одинаковых названий файлов в документе |   |  
				| 
 |  
				| Приветствую Есть ли возможность находить одинаковые названия файлов в документе. Например, в документе содержится некое кол-во названий файлов:
 gr_prol1.p
 gr_prola.p
 g_srocpr.p
 i-sphere.p
 i-sphere.p
 существуют одинаковые.. Есть ли возможность, все повторяющиеся удалить, оствавив по одному названию ?
 спасибо
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Bishop 
 
 
 Joined: 15 May 2007
 Posts: 98
 
 
 | 
			
				|  (Separately) Posted: Wed Jul 16, 2008 12:30    Post subject: |   |  
				| 
 |  
				| maxeon В PowerShell это можно сделать командой:
 
  	  | Code: |  	  | Get-Content 1.txt | Sort-Object -Unique | Set-Content 1.txt | 
 Где 1.txt — твой файл с именами.
 
 Или вот такой батник:
 
  	  | Code: |  	  | @ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
 IF -%1==- GOTO :EOF
 IF NOT EXIST %1 GOTO :EOF
 SET tmpfile=~~~.txt
 SORT %1 /O %tmpfile%
 FOR /f %%f IN (%tmpfile%) DO ((IF NOT !asdfg!==%%f ECHO %%f) & SET asdfg=%%f)
 SET asdfg=
 DEL %tmpfile%
 SET tmpfile=
 ENDLOCAL
 | 
 Сохранить текст в, например, 1.cmd.
 Запустить так: 1.cmd 1.txt > 2.txt
 В 2.txt будет результат — отсортированный список без дубликатов.
 
 Last edited by Bishop on Wed Jul 16, 2008 13:22; edited 1 time in total
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Batya 
 
  
 Joined: 15 Dec 2004
 Posts: 2229
 Location: Москва, Россия
 
 | 
			
				|  (Separately) Posted: Wed Jul 16, 2008 13:10    Post subject: |   |  
				| 
 |  
				| Bishop Слушай, я не силен в батниках, но, на мой взгляд, вместо "SORT 1.txt" лучше написать "SORT %1".
 И еще... Я бы вместо "IF -%1==-" написал "IF NOT EXIST %1".
 _________________
 Нет, я не сплю. Я просто медленно моргаю.
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Bishop 
 
 
 Joined: 15 May 2007
 Posts: 98
 
 
 | 
			
				|  (Separately) Posted: Wed Jul 16, 2008 13:29    Post subject: |   |  
				| 
 |  
				| Batya спасибо, SORT поправил.
 
 "IF -%1==-" — это проверка на существование переменной %1. Если её не делать, то "IF NOT EXIST %1" в следующей строке при отсутствии параметра будет выдавать "Ошибка в синтаксисе команды".
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Batya 
 
  
 Joined: 15 Dec 2004
 Posts: 2229
 Location: Москва, Россия
 
 | 
			
				|  (Separately) Posted: Wed Jul 16, 2008 17:58    Post subject: |   |  
				| 
 |  
				| А, точно. 	  | Bishop wrote: |  	  | будет выдавать "Ошибка в синтаксисе команды" | 
 
 
  Можно без предварительной проверки - кавычки "спасут отца русской демократии"  : 
 _________________
 Нет, я не сплю. Я просто медленно моргаю.
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| maxeon 
 
 
 Joined: 20 Nov 2007
 Posts: 5
 
 
 | 
			
				|  (Separately) Posted: Wed Jul 16, 2008 18:36    Post subject: |   |  
				| 
 |  
				| господа, я могу и не знать названий файлов, их очень много может быть.. необходимо что дубликаты убирались независимо, какие и сколько их присутствует..
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Batya 
 
  
 Joined: 15 Dec 2004
 Posts: 2229
 Location: Москва, Россия
 
 | 
			
				|  (Separately) Posted: Wed Jul 16, 2008 18:51    Post subject: |   |  
				| 
 |  
				| maxeon Хм. Так тебе ж человек русским языком написал.
 У тебя есть "документ":
 Этот "документ" должен быть текстового формата, например: 	  | maxeon wrote: |  	  | одинаковые названия файлов в документе | 
 Создаешь cmd-файл: 	  | Bishop wrote: |  	  | Где 1.txt — твой файл с именами. | 
 Запускаешь cmd-файл, указав свой "документ" в качестве параметра: 	  | Bishop wrote: |  	  | Сохранить текст в, например, 1.cmd. | 
 В итоге получишь еще один текстовый "документ" со списком файлов без дубликатов. Единственное уточнение - в новом "документе" список файлов будет отсортирован. 	  | Bishop wrote: |  	  | Запустить так: 1.cmd 1.txt > 2.txt | 
 _________________
 Нет, я не сплю. Я просто медленно моргаю.
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| maxeon 
 
 
 Joined: 20 Nov 2007
 Posts: 5
 
 
 | 
			
				|  (Separately) Posted: Thu Jul 17, 2008 11:35    Post subject: |   |  
				| 
 |  
				| точно, не внимательно прочитал верно подметил Batya, пасиб.
 
 Bishop
 благодарствую
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Bishop 
 
 
 Joined: 15 May 2007
 Posts: 98
 
 
 | 
			
				|  (Separately) Posted: Thu Jul 17, 2008 15:15    Post subject: |   |  
				| 
 |  
				| Batya в конструкциибудет ошибка, если передаётся имя файла (например, с пробелом) в кавычках: sort_unique.cmd  "1 1.txt"
  |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Моторокер 
 
  
 Joined: 06 May 2005
 Posts: 1517
 Location: г. Пермь (читается Перьмь)
 
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Batya 
 
  
 Joined: 15 Dec 2004
 Posts: 2229
 Location: Москва, Россия
 
 | 
			
				|  (Separately) Posted: Fri Jul 18, 2008 13:44    Post subject: |   |  
				| 
 |  
				| Bishop И все-таки я его победю!
   Можно так:
 Т.е. в нашем случае: 	  | Code: |  	  | @set F="%~dpnx1"
@if exist %F% echo Yes
 @if not exist %F% echo NO
 | 
  	  | Code: |  	  | @if not exist "%~dpnx1" | 
 _________________
 Нет, я не сплю. Я просто медленно моргаю.
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Bishop 
 
 
 Joined: 15 May 2007
 Posts: 98
 
 
 | 
			
				|  (Separately) Posted: Fri Jul 18, 2008 22:00    Post subject: |   |  
				| 
 |  
				| Batya, суров
   Ещё в скрипте была серьёзная ошибка: имена файлов в "документе", содержащие пробел, обрезались до первого слова. До кучи, временный файл создавался в текущем каталоге, а в общем случае запись туда может быть запрещена
  Зацени исправления: 
  	  | Code: |  	  | @ECHO OFF
IF NOT EXIST "%~F1" GOTO :EOF
 SETLOCAL ENABLEDELAYEDEXPANSION
 SET tmpfile="%TEMP%\%~N1.~~~"
 SORT "%~F1" /O %tmpfile%
 FOR /f "delims=" %%f IN ('TYPE %tmpfile%') DO ((IF NOT !asdfg!==%%f ECHO %%f) && SET asdfg=%%f)
 SET asdfg=
 DEL %tmpfile%
 SET tmpfile=
 ENDLOCAL
 | 
 Правда так приходится временный файл явно читать.
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Batya 
 
  
 Joined: 15 Dec 2004
 Posts: 2229
 Location: Москва, Россия
 
 | 
			
				|  (Separately) Posted: Mon Jul 21, 2008 12:14    Post subject: |   |  
				| 
 |  
				|  	  | Bishop wrote: |  	  | Зацени исправления | 
 Ну, это больше к автору топика, а не ко мне.
 Я чисто по синтаксису смотрел.
 Еще раз повторю, что не силен в батниках. То, что сейчас у тебя получилось, выглядит красиво
   
 
 А я совсем забыл, как полный путь записать, поэтому делал перечислением через "%~dpnx1"
   
 Сейчас вот думаю, а не сделать ли vbs-скрипт по теме. Сортровку при этом не надо будет делать.
 maxeon
 Все ли устраивает в батнике от Bishop-а? Или нужен скрипт с доп. возможностями?
 _________________
 Нет, я не сплю. Я просто медленно моргаю.
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Вахмурка 
 
  
 Joined: 27 Dec 2004
 Posts: 2586
 Location: Большая деревня Москва
 
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| Lev 
 
  
 Joined: 02 Mar 2005
 Posts: 392
 
 
 | 
			
				|  (Separately) Posted: Mon Jul 28, 2008 22:10    Post subject: |   |  
				| 
 |  
				| то же самое на vbs 
  	  | Code: |  	  | 'noduplines.vbs
'удаление дублирующихся строк из выделенного в тотале файла и сохранение в *.filtered
 Set FSO = CreateObject("Scripting.FileSystemObject")
 Set Dict = CreateObject("Scripting.Dictionary")
 Set TCS = CreateObject("TCScript.Helper")
 ff=TCS.GetSrcSelectedFiles(-1)(0)
 Set TextFile = FSO.OpenTextFile(ff, 1)
 
 Do While TextFile.AtEndOfStream <> True
 strLine = textFile.ReadLine
 If not Dict.Exists(strLine) Then Dict.Add strLine, 1
 Loop
 
 For Each m In dict.Keys
 s = s & m & vbCrLf
 Next
 
 Set f = FSO.CreateTextFile(ff & ".filtered")
 f.Write s
 f.Close
 | 
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		|  |