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: 2227 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: 2227 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: 2227 Location: Москва, Россия
|
(Separately) Posted: Wed Jul 16, 2008 18:51 Post subject: |
|
|
maxeon
Хм. Так тебе ж человек русским языком написал.
У тебя есть "документ": maxeon wrote: | одинаковые названия файлов в документе | Этот "документ" должен быть текстового формата, например: Bishop wrote: | Где 1.txt — твой файл с именами. | Создаешь cmd-файл: Bishop wrote: | Сохранить текст в, например, 1.cmd. | Запускаешь 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: 2227 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: 2227 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 |
|
 |
|