Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удалить из файла "Test.txt" все символы звездочка * (http://forum.oszone.net/showthread.php?t=299876)

ufooo 17-05-2015 02:59 2508197

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

Iska 17-05-2015 03:14 2508199

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

ufooo 17-05-2015 03:29 2508200

Цитата:

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

Ясно, будем смотреть.

Georgio 17-05-2015 12:08 2508283

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 2508286

Цитата:

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

Не знал такое.

Iska 17-05-2015 12:25 2508289

Цитата:

Цитата Georgio
Код:

…(1 1 %%i) do <"%file%">.tmp (
    set x=& set/p x=…

»

Надо будет запомнить, весьма удачная идея.

Цитата:

Цитата ufooo
Не знал такое. »

Цитата:

Цитата set /?
Подстановка переменной среды может быть расширена следующим образом:
Код:

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

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

ufooo 17-05-2015 13:38 2508322

Цитата:

Цитата Georgio
powershell "sc ($x='Test.txt') ((gc $x)-replace """\*""")" »

А как этим же кодом удалить символ: ( \ )

Iska 17-05-2015 13:52 2508325

Цитата:

Цитата ufooo
А как этим же кодом удалить символ: ( \ ) »

Заменить в шаблоне регулярного выражения «\*» на «\\» пробовали?

Georgio 17-05-2015 13:56 2508326

ufooo, действительно не учёл эту особенность. Утраивать (как и двойную кавычку):
Код:

@powershell "sc ($x='Test.txt') ((gc $x)-replace """\\\\""")"
.

ufooo 17-05-2015 14:20 2508330

Цитата:

Цитата Georgio
ufooo, действительно не учёл эту особенность. »

А я недодумался и утраивал так: """

Georgio 17-05-2015 14:29 2508336

Конечно, если бы не использовалась "универсализация" кода, то можно было писать и так:
Код:

@powershell "sc ($x='Test.txt') ((gc $x)-replace '\\')"
.


Время: 21:30.

Время: 21:30.
© OSzone.net 2001-