пакетный скрипт - удалить дубликаты токенов в файле - PullRequest
0 голосов
/ 25 января 2012

У меня есть дубликаты токенов в текстовом файле. Я хотел бы создать новый текстовый файл без дубликатов токенов (с разделителями)

Разделитель: ~ @ ^ * ^ @ ~
файл примера:

aaa~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb~@^*^@~xxx~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb~@^*^@~aaa~@^*^@~bbb

Результат должен быть:

aaa~@^*^@~bbb~@^*^@~xxx

Я нашел скрипт , удаляющий повторяющиеся строки:

==================================
@echo off > outfile
if %1'==' echo which file? && goto :eof
if not exist %1 echo %1 not found && goto :eof

for /f "tokens=* delims= " %%a in (%1) do (
find "%%a" < outfile > nul
    if errorlevel 1 echo %%a >> outfile
)

Скрипт отлично работает для дублирующих строк,
Итак, я изменил разделы с:

 "tokens=* delims="

до

"tokens=* delims=~@^*^@~"

Но это не сработает. Что я делаю не так? является одним из символов-разделителей зарезервированным словом?
Спасибо за любые предложения.

1 Ответ

2 голосов
/ 26 января 2012

Параметр FOR DELIMITERS рассматривает каждый символ как разделитель. Вы не можете использовать последовательность символов в качестве разделителя, поэтому в вашем случае это не поможет.

Пакет Windows - маргинальный текстовый процессор для простых задач. У вас особенно неприятная проблема для пакетного файла Windows. Это может быть выполнимо, но код будет сложным и медленным в лучшем случае .

Я настоятельно советую вам использовать какой-то другой инструмент, более подходящий для обработки текста. Я считаю, что может быть использовано любое из следующего:

  • VBscript
  • JavaScript
  • Powershell
  • сторонние инструменты, такие как Gnu sed для Windows , perl, ... многие другие

Пакет Windows, вероятно, является худшим выбором, который вы можете сделать, особенно для вашей проблемы. (это от кого-то, кто действительно любит использовать пакет)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...