Seleccionar cadena / sls

Seleccionar cadena / sls

Este comando de Powershell funciona en un archivo por lotes para eliminar todas las líneas %tempFile%que contienen la cadena de textofoo

powershell -NoProfile -ExecutionPolicy Bypass -Command "gci %tempFile% | foreach { (cat $_.FullName | ? { $_ -notlike '*foo*' }) | set-content $_.FullName -Force }"

El -notlikecomando también funciona sin utilizar asteriscos:

| ? { $_ -notlike 'foo' }) |

Tengo líneas %tempFile%que contienen un carácter de barra invertida \y quiero eliminarlas. La solución habitual es duplicar el carácter de barra invertida para escapar de esta manera \\y, si bien eso funciona cuando uso comandos de reemplazo, no me funciona cuando uso el -notlikecomando anterior.

Ninguno de estos ejemplos funciona:

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 }"

¿Me pregunto porque?

Gracias de antemano a cualquiera que pueda arrojar algo de luz sobre esto.

Respuesta1

@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%"

  • Resulta en:
 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

Úselo catpara almacenar el contenido del archivo restando líneas con el \carácter, que se puede escapar con adicional \ ===> \\.

E intente reemplazar ... -notlike '\\'a ... -NotMatch '\\'o... -Not '\\'


Seleccionar cadena / sls

  • Breve descripción:

Los operadores de comparación en PowerShell pueden comparar dos valores
o filtrar elementos de una colección con un valor de entrada.

  • Descripción larga:

Los operadores de comparación le permiten comparar valores o encontrar valores que
coincidan con patrones específicos. PowerShell incluye los siguientes
operadores de comparación:

  • Igualdad
-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
  • Pareo
-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

información relacionada