
Эта команда Powershell работает в пакетном файле и удаляет все строки, %tempFile%
содержащие текстовую строкуfoo
powershell -NoProfile -ExecutionPolicy Bypass -Command "gci %tempFile% | foreach { (cat $_.FullName | ? { $_ -notlike '*foo*' }) | set-content $_.FullName -Force }"
Команда -notlike
работает и без использования звездочек:
| ? { $_ -notlike 'foo' }) |
У меня есть строки, %tempFile%
содержащие символ обратной косой черты \
, и я хочу удалить эти строки. Обычное решение — удвоить символ обратной косой черты, чтобы экранировать его, как здесь, \\
и хотя это работает при использовании команд замены, у меня это не работает, когда я использую -notlike
команду выше.
Ни один из этих примеров не работает:
powershell -NoProfile -ExecutionPolicy Bypass -Command "gci %tempFile% | foreach { (cat $_.FullName | ? { $_ -notlike '*\\*' }) | set-content $_.FullName -Force }"
powershell -NoProfile -ExecutionPolicy Bypass -Command "gci %tempFile% | foreach { (cat $_.FullName | ? { $_ -notlike '*\*' }) | set-content $_.FullName -Force }"
powershell -NoProfile -ExecutionPolicy Bypass -Command "gci %tempFile% | foreach { (cat $_.FullName | ? { $_ -notlike '\\' }) | set-content $_.FullName -Force }"
powershell -NoProfile -ExecutionPolicy Bypass -Command "gci %tempFile% | foreach { (cat $_.FullName | ? { $_ -notlike '\' }) | set-content $_.FullName -Force }"
Интересно, почему?
Заранее спасибо всем, кто сможет пролить свет на этот вопрос.
решение1
@echo off
>"%temp%\Q1767780.txt" ^
(
echo+ Lorem ipsum dolor sit amet. Qui magnam adipisci id officiis
echo+ temporibus non minima molestias ex animi tempora et eveniet atque.
echo\ Et ratione unde qui numquam libero est voluptas nesciunt.\
echo+
echo\ Id \corporis dolorum vel debitis dolore ut voluptas temporibus est
echo+ obcaecati harum eos earum fugit et reprehenderit temporibus eos
echo\ voluptas vero.\
echo\ \
) && set "_tempFile=%temp%\Q1767780.txt"
PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "$Strs=(cat "%_tempFile%" | sls -Not '\\'); sc "%_tempFile%" $Strs -Force"
type "%_tempFile%"
- Результат в:
Lorem ipsum dolor sit amet. Qui magnam adipisci id officis
temporibus non minima molestias ex animi tempora et eveniet atque.
obcaecati harum eos earum fugit et reprehenderit temporibus eos
Используется cat
для сохранения содержимого файла путем вычитания строк с \
символом, который можно экранировать с помощью adicional \ ===> \\
.
И попробуйте заменить ... -notlike '\\'
на ... -NotMatch '\\'
или... -Not '\\'
Выбрать строку / sls
- Краткое описание:
Операторы сравнения в PowerShell могут либо сравнивать два значения
, либо фильтровать элементы коллекции по входному значению.
- Длинное описание:
Операторы сравнения позволяют сравнивать значения или находить значения,
соответствующие указанным шаблонам. PowerShell включает следующие
операторы сравнения:
- Равенство
-eq, -ieq, -ceq - equals
-ne, -ine, -cne - not equals
-gt, -igt, -cgt - greater than
-ge, -ige, -cge - greater than or equal
-lt, -ilt, -clt - less than
-le, -ile, -cle - less than or equal
- Соответствие
-like, -ilike, -clike - string matches wildcard pattern
-notlike, -inotlike, -cnotlike - string doesn't match wildcard pattern
-match, -imatch, -cmatch - string matches regex pattern
-notmatch, -inotmatch, -cnotmatch - string doesn't match regex pattern