PDA

Показать полную графическую версию : [решено] Удалить из файла "Test.txt" все символы звездочка *


ufooo
17-05-2015, 02:59
Можно (.bat) кодом удалить из файла, "Test.txt" все символы, (звездочка *) ?

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

ufooo
17-05-2015, 03:29
Подобные вещи лучше делать с помощью утилит (например, портированных из Unix), WSH или PoSH. »
Ясно, будем смотреть.

Georgio
17-05-2015, 12:08
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 в коде пакетного файла символ процента также нужно удваивать, а символ двойной кавычки -- утраивать.

ufooo
17-05-2015, 12:22
а в том, что нельзя удалить именно символ "*". Также нельзя ещё удалить символы "=" и "~". »
Не знал такое.

Iska
17-05-2015, 12:25
…(1 1 %%i) do <"%file%">.tmp (
set x=& set/p x=… »
Надо будет запомнить, весьма удачная идея.

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

А других способов в пакетных файлах в общем-то и нет.

ufooo
17-05-2015, 13:38
powershell "sc ($x='Test.txt') ((gc $x)-replace """\*""")" »
А как этим же кодом удалить символ: ( \ )

Iska
17-05-2015, 13:52
А как этим же кодом удалить символ: ( \ ) »
Заменить в шаблоне регулярного выражения «\*» на «\\» пробовали?

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

ufooo
17-05-2015, 14:20
ufooo, действительно не учёл эту особенность. »
А я недодумался и утраивал так: """

Georgio
17-05-2015, 14:29
Конечно, если бы не использовалась "универсализация" кода, то можно было писать и так: @powershell "sc ($x='Test.txt') ((gc $x)-replace '\\')".




© OSzone.net 2001-2012