Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удалить из файла "Test.txt" все символы звездочка *

Ответить
Настройки темы
CMD/BAT - [решено] Удалить из файла "Test.txt" все символы звездочка *

Пользователь


Сообщения: 109
Благодарности: 2

Профиль | Отправить PM | Цитировать


Можно (.bat) кодом удалить из файла, "Test.txt" все символы, (звездочка *) ?

Отправлено: 02:59, 17-05-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Вообще пакетные файлы не особо предназначены для таких действий из-за особенностей самого языка. Подобные вещи лучше делать с помощью утилит (например, портированных из Unix), WSH или PoSH.

Отправлено: 03:14, 17-05-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 109
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
Подобные вещи лучше делать с помощью утилит (например, портированных из Unix), WSH или PoSH. »
Ясно, будем смотреть.

Отправлено: 03:29, 17-05-2015 | #3


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


ufooo, проблема здесь не в том, что с использованием "чистого" пакетного файла нельзя удалить какой-либо символ, а в том, что нельзя удалить именно символ "*". Также нельзя ещё удалить символы "=" и "~".



Остальные символы (включая даже двойную кавычку) можно удалять с помощью такого кода (на примере амперсанда):


Код: Выделить весь код
@echo off
setlocal

set "file=Test.txt"
set "char=&"

for /f %%i in ('
 ^<"%file%" find/c /v ""
') do <"%file%">.tmp (
 for /l %%i in (1 1 %%i) do (
  set x=& set/p x=& if defined x (
   cmd/v/c echo.!x:^^^%char%^^=!
  ) else (
   echo.
  )
 )
)
>nul move .tmp "%file%"

endlocal
exit/b 0

.



N.B.! Если надо удалить символ процента, то писать надо так:
Код: Выделить весь код
set "char=%%"
.




А вот с помощью кода PowerShell можно удалить любой символ. Вот этот код, вставленный в код обычного пакетного файла (уже на примере "Вашей" звёздочки):
Код: Выделить весь код
@powershell "sc ($x='Test.txt') ((gc $x)-replace """\*""")"
.



N.B.! С учётом особенностей применения кода PowerShell в коде пакетного файла символ процента также нужно удваивать, а символ двойной кавычки -- утраивать.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:08, 17-05-2015 | #4


Пользователь


Сообщения: 109
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Georgio:
а в том, что нельзя удалить именно символ "*". Также нельзя ещё удалить символы "=" и "~". »
Не знал такое.

Отправлено: 12:22, 17-05-2015 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Georgio:
Код: Выделить весь код
…(1 1 %%i) do <"%file%">.tmp (
    set x=& set/p x=…
»
Надо будет запомнить, весьма удачная идея.

Цитата ufooo:
Не знал такое. »
Цитата set /?:
Подстановка переменной среды может быть расширена следующим образом:
Код: Выделить весь код
%PATH:str1=str2%
расширит действие переменной среды PATH, заменяя каждое вхождение "str1" в расширенном результате на "str2". "str2" может быть пустой строкой для эффективного удаления вхождений "str1" из расширенного вывода. "str1" может начинаться со звездочки, и в этом случае это будет соответствовать любому началу расширенного вывода до первого вхождения оставшейся части "str1".
А других способов в пакетных файлах в общем-то и нет.

Отправлено: 12:25, 17-05-2015 | #6


Пользователь


Сообщения: 109
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Georgio:
powershell "sc ($x='Test.txt') ((gc $x)-replace """\*""")" »
А как этим же кодом удалить символ: ( \ )

Последний раз редактировалось ufooo, 17-05-2015 в 13:46.


Отправлено: 13:38, 17-05-2015 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата ufooo:
А как этим же кодом удалить символ: ( \ ) »
Заменить в шаблоне регулярного выражения «\*» на «\\» пробовали?

Отправлено: 13:52, 17-05-2015 | #8


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


ufooo, действительно не учёл эту особенность. Утраивать (как и двойную кавычку):
Код: Выделить весь код
@powershell "sc ($x='Test.txt') ((gc $x)-replace """\\\\""")"
.

Последний раз редактировалось Georgio, 17-05-2015 в 14:02.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:56, 17-05-2015 | #9


Пользователь


Сообщения: 109
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Georgio:
ufooo, действительно не учёл эту особенность. »
А я недодумался и утраивал так: """

Отправлено: 14:20, 17-05-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удалить из файла "Test.txt" все символы звездочка *

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Как из строки в .txt вывести символы "которые там обновляются"в другой .txt Bombastig Скриптовые языки администрирования Windows 6 08-02-2014 04:54
CMD/BAT - [решено] Нужно создать "батник" - вырезать из "2.txt" первых n строк и вставить их в "1.txt" temphard Скриптовые языки администрирования Windows 12 10-01-2014 18:36
Разное - Как изменить "тип файла" Key на любой, типа TXT? flev45 Хочу все знать 3 20-08-2011 17:23
Разное - [решено] Как в список "Символы" добавить собственные символы для вставки в текст T-IIIJ Microsoft Windows 2000/XP 4 23-02-2008 16:27
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") submaster Microsoft Windows NT/2000/2003 5 13-09-2006 12:29




 
Переход