![]() |
Удаление нежелательных символов из строки.
Доброго времени суток уважаемые форумчане, в процессе написания батника возникла задача - очистить строки от нежелательных символов. Нежелательные символы, в идеале, это - !"№@#$^&*\|/?:%<~>` Частично проблема решается, но не со всеми символами прокатывает. Например &,%,<,>,| и " (двойная кавычка) ведут себя странновато. Подскажите способ их аккуратно извлечь и удалить не потеряв исходный текст, учитывая что строки читаются из файла, нельзя предугадать появление символов и нет возможности экранировать их в файле. Пример того что уже есть:
IN: Код:
@echo off Код:
"*" |
Amunrah, в CMD это сделать невозможно (имхо). Вот VBS
Код:
FileIn = "Z:\Box_In\Большой txt файл.txt" |
Цитата:
bat c вызовом js
Код:
@set @E=1; /* |
Цитата:
Цитата:
|
Цитата:
|
Amunrah, для каждой кодировки — свой подход нужен. А про пакетные файлы здесь вообще забудьте: только WSH или PowerShell.
|
как правильно заметил megaloman в cmd сложно сделать подобные вещи, но можно сделать просто предупреждающий bat.
Например есть файл, в строках которого мы не уверены, но хотим их использовать для имен файлов или папок, поможет такой bat: (использованы, соответственно символы, запрещенные системой для имен) Код:
@echo off |
Вложений: 2
Amunrah,
Цитата:
vbs в 1251 кодировке и текст в 866 кодировке тоже работают, но строку для замены пришлось подшаманить, чтобы № заменялся. Прикрепил к сообщению. (переименовал в txt). Если в Вашем тексте нет гос секретов и вмешательства в американские выборы, хотелось бы протестировать решения на Вашем реальном файле. И, однозначно, при разных кодировках файлов надо подбирать, как сохранить строку заменяемых символов - её кодировка должна совпадать с кодировкой файла. По видимому, корректнее задавать эту строку в виде массива кодов символов. |
Цитата:
|
Iska, каждая задача должна иметь конечный смысл. Замена символов в файле - не конечная цель. Не может быть, чтобы на разных машинах файл для суперзадачи приходит в разных кодировках. Как не изгаляйся, останется вопрос: а зачем всё это нужно?Я еще могу пытаться телепатить, но заставить телепатить скрипт я не готов
|
Вложений: 1
Цитата:
Проблемы появляются, когда пользователь с фантазией не скучно и не стандартно обзывает свои базы, поэтому и возникает необходимость прогонять некоторые строки файла через фильтр. Если подходить строго, то удалять нужно символы, которые нельзя использовать в путях, но задача показалась мне интересной и для универсальности хотелось бы менять набор символов в широком диапазоне. п.с. Понимаю, что практически на любом другом интерпретируемом языке реализовать подобное не составило бы большого труда, однако нужно чтобы и работало на любом компе. п.п.с Файлик во вложении |
Задача оказалась решаемой. Просто нужно быть аккуратнее с синтаксисом. Оставлю тут, может кому-то тоже пригодится:
IN: Код:
@echo off Код:
"*" |
Amunrah,
кроме парных кавычек проблемы с удалением может доставить знак "=" еще почему-то нет "^", хотя тоже проблемный символ. вообще как по мне достаточно варианта что я приводил из п7, проблемные строки просто игнорируются с выводом на экран и если учесть что проблемные строки из вашего файла претерпевают изменение, то небольшая разница с игнорированием или можно сделать замену на "name(N+1)" |
alpap:
Цитата:
Дополнил регулярку - [\\|/?:*#^^=@!%&~$<>] - при чтении из файла срабатывает нормально, однако если задавать строку в батнике, то символ ^ нужно экранировать ^^ |
Цитата:
Цитата:
Amunrah, многое из того, что Вы выбрасываете, вполне допустимо в путях и именах файлов: Naming Files, Paths, and Namespaces | Microsoft Docs. И да — разворачиваете на Windows XP PowerShell 2.0 и перестаёте заниматься извращениями на пакетных файлах ([System.IO.Path]::GetInvalidPathChars()/[System.IO.Path]::GetInvalidFileNameChars()). |
Iska
Цитата:
|
Время: 21:23. |
Время: 21:23.
© OSzone.net 2001-