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 -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
maxeon



Joined: 20 Nov 2007
Posts: 5

Post (Separately) Posted: Wed Jul 16, 2008 11:39    Post subject: Удаление одинаковых названий файлов в документе Reply with quote

Приветствую
Есть ли возможность находить одинаковые названия файлов в документе. Например, в документе содержится некое кол-во названий файлов:
gr_prol1.p
gr_prola.p
g_srocpr.p
i-sphere.p
i-sphere.p
существуют одинаковые.. Есть ли возможность, все повторяющиеся удалить, оствавив по одному названию ?
спасибо
Back to top
View user's profile Send private message
Bishop



Joined: 15 May 2007
Posts: 98

Post (Separately) Posted: Wed Jul 16, 2008 12:30    Post subject: Reply with quote

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
View user's profile Send private message
Batya



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

Post (Separately) Posted: Wed Jul 16, 2008 13:10    Post subject: Reply with quote

Bishop
Слушай, я не силен в батниках, но, на мой взгляд, вместо "SORT 1.txt" лучше написать "SORT %1".
И еще... Я бы вместо "IF -%1==-" написал "IF NOT EXIST %1".

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Bishop



Joined: 15 May 2007
Posts: 98

Post (Separately) Posted: Wed Jul 16, 2008 13:29    Post subject: Reply with quote

Batya
спасибо, SORT поправил.

"IF -%1==-" — это проверка на существование переменной %1. Если её не делать, то "IF NOT EXIST %1" в следующей строке при отсутствии параметра будет выдавать "Ошибка в синтаксисе команды".
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Wed Jul 16, 2008 17:58    Post subject: Reply with quote

Bishop wrote:
будет выдавать "Ошибка в синтаксисе команды"
А, точно.

Idea Можно без предварительной проверки - кавычки "спасут отца русской демократии" Smile:
Code:
IF NOT EXIST "%1"

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
maxeon



Joined: 20 Nov 2007
Posts: 5

Post (Separately) Posted: Wed Jul 16, 2008 18:36    Post subject: Reply with quote

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



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

Post (Separately) Posted: Wed Jul 16, 2008 18:51    Post subject: Reply with quote

maxeon
Хм. Так тебе ж человек русским языком написал.
У тебя есть "документ":
maxeon wrote:
одинаковые названия файлов в документе
Этот "документ" должен быть текстового формата, например:
Bishop wrote:
Где 1.txt — твой файл с именами.
Создаешь cmd-файл:
Bishop wrote:
Сохранить текст в, например, 1.cmd.
Запускаешь cmd-файл, указав свой "документ" в качестве параметра:
Bishop wrote:
Запустить так: 1.cmd 1.txt > 2.txt
В итоге получишь еще один текстовый "документ" со списком файлов без дубликатов. Единственное уточнение - в новом "документе" список файлов будет отсортирован.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
maxeon



Joined: 20 Nov 2007
Posts: 5

Post (Separately) Posted: Thu Jul 17, 2008 11:35    Post subject: Reply with quote

точно, не внимательно прочитал
верно подметил Batya, пасиб.

Bishop
благодарствую
Back to top
View user's profile Send private message
Bishop



Joined: 15 May 2007
Posts: 98

Post (Separately) Posted: Thu Jul 17, 2008 15:15    Post subject: Reply with quote

Batya
в конструкции
Code:
IF NOT EXIST "%1"
будет ошибка, если передаётся имя файла (например, с пробелом) в кавычках: sort_unique.cmd "1 1.txt" Smile
Back to top
View user's profile Send private message
Моторокер



Joined: 06 May 2005
Posts: 1517
Location: г. Пермь (читается Перьмь)

Post (Separately) Posted: Fri Jul 18, 2008 07:38    Post subject: Reply with quote

Попробуй программу Автоформат.
Вставь текст, нажми правую кнопку, выбери Удалить дубли.
_________________
плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Fri Jul 18, 2008 13:44    Post subject: Reply with quote

Bishop
И все-таки я его победю! Smile
Можно так:
Code:
@set F="%~dpnx1"
@if exist %F% echo Yes
@if not exist %F% echo NO
Т.е. в нашем случае:
Code:
@if not exist "%~dpnx1"

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Bishop



Joined: 15 May 2007
Posts: 98

Post (Separately) Posted: Fri Jul 18, 2008 22:00    Post subject: Reply with quote

Batya,
суров Smile
Ещё в скрипте была серьёзная ошибка: имена файлов в "документе", содержащие пробел, обрезались до первого слова. До кучи, временный файл создавался в текущем каталоге, а в общем случае запись туда может быть запрещена Smile Зацени исправления:
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
View user's profile Send private message
Batya



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

Post (Separately) Posted: Mon Jul 21, 2008 12:14    Post subject: Reply with quote

Bishop wrote:
Зацени исправления

Ну, это больше к автору топика, а не ко мне.
Я чисто по синтаксису смотрел.
Еще раз повторю, что не силен в батниках. То, что сейчас у тебя получилось, выглядит красиво Smile

Bishop wrote:
%~F1

А я совсем забыл, как полный путь записать, поэтому делал перечислением через "%~dpnx1" Very Happy

Сейчас вот думаю, а не сделать ли vbs-скрипт по теме. Сортровку при этом не надо будет делать.
maxeon
Все ли устраивает в батнике от Bishop-а? Или нужен скрипт с доп. возможностями?
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2586
Location: Большая деревня Москва

Post (Separately) Posted: Sun Jul 27, 2008 10:35    Post subject: Reply with quote

maxeon wrote:
Есть ли возможность, все повторяющиеся удалить, оствавив по одному названию ?
Во многих текстовых редакторах есть такая функция. Например, в EmEditor'e.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Mon Jul 28, 2008 22:10    Post subject: Reply with quote

то же самое на 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
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы 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