Выбрать строку / sls

Выбрать строку / sls

Эта команда 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

Связанный контент