Показать полную графическую версию : [решено] Удалить из файла "Test.txt" все символы звездочка *
Можно (.bat) кодом удалить из файла, "Test.txt" все символы, (звездочка *) ?
Вообще пакетные файлы не особо предназначены для таких действий из-за особенностей самого языка. Подобные вещи лучше делать с помощью утилит (например, портированных из Unix), WSH или PoSH.
Подобные вещи лучше делать с помощью утилит (например, портированных из Unix), WSH или PoSH. »
Ясно, будем смотреть.
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 в коде пакетного файла символ процента также нужно удваивать, а символ двойной кавычки -- утраивать.
а в том, что нельзя удалить именно символ "*". Также нельзя ещё удалить символы "=" и "~". »
Не знал такое.
…(1 1 %%i) do <"%file%">.tmp (
set x=& set/p x=… »
Надо будет запомнить, весьма удачная идея.
Не знал такое. »
Подстановка переменной среды может быть расширена следующим образом:
%PATH:str1=str2%
расширит действие переменной среды PATH, заменяя каждое вхождение "str1" в расширенном результате на "str2". "str2" может быть пустой строкой для эффективного удаления вхождений "str1" из расширенного вывода. "str1" может начинаться со звездочки, и в этом случае это будет соответствовать любому началу расширенного вывода до первого вхождения оставшейся части "str1".
А других способов в пакетных файлах в общем-то и нет.
powershell "sc ($x='Test.txt') ((gc $x)-replace """\*""")" »
А как этим же кодом удалить символ: ( \ )
А как этим же кодом удалить символ: ( \ ) »
Заменить в шаблоне регулярного выражения «\*» на «\\» пробовали?
ufooo, действительно не учёл эту особенность. Утраивать (как и двойную кавычку): @powershell "sc ($x='Test.txt') ((gc $x)-replace """\\\\""")".
ufooo, действительно не учёл эту особенность. »
А я недодумался и утраивал так: """
Конечно, если бы не использовалась "универсализация" кода, то можно было писать и так: @powershell "sc ($x='Test.txt') ((gc $x)-replace '\\')".
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC