此 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