where-object Powershell 的输入参数中的连字符
Hyphen in the input parameter for where-object Powershell
我是 Powershell 的初学者。我有一些疑问。我将 Import-Csv cmdlet 用于从旧软件生成的制表符分隔文本文件。下面是分隔文件的等效版本。从文本文件中,我必须过滤那些具有 destination->observability§bin 为 1.
的条目
Time [s] Offset_Angle destination->observability§bin
0.00E+00 -0.20402611670286 0.00000000000000E+00
4.32E+02 0.21319658757004 0.00000000000000E+00
8.64E+02 0.26803683992125 0.00000000000000E+00
1.30E+03 2.67379011780784 1.00000000000000E+00
1.73E+03 -2.89704767087971 1.00000000000000E+00
2.16E+03 -2.93302157473406 1.00000000000000E+00
代码片段如下
$ap = Import-Csv -Delimiter "`t" -Path E:\Myfiles\textfile.txt
$ap|where-Object {$_.destination->observability§bin -eq "1.00000000000000E+00”}
我让第一行工作了。当我执行第二行时,它会抛出一条错误消息。
At line:1 char:34
+ $ap|where-Object {$_.destination->observability§bin
+ ~
You must provide a value expression following the '-' operator.
At line:1 char:53
+ ... _.destination->observability§bin -eq '1.0000 ...
+ ~~~
Unexpected token '-eq' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedValueExpression
所以我猜它在输入参数中使用“-”符号作为运算符(字符 34)。我还尝试了一些转义字符,例如 - 符号前的反勾号 (`)。但是没有得到任何东西。请帮我解决这个问题。
谢谢。
您应该将其括在引号中:
$ap | Where-Object {$_."destination->observability§bin" -eq "1.00000000000000E+00"}
虽然您也可能对 §
字符有疑问
尝试使用 import-csv cmdlet 的 -header 子句为三个字段提供您自己的名称,并为它们命名合理。您可能需要对其进行编程以跳过 csv 的第一条记录,以防止实际的 header 被当作第一条记录来读取。
谢谢大家。在引号内添加名称没有用。当我将 header 名称更改为没有连字符和任何其他特殊字符的合法名称时,它起作用了
我是 Powershell 的初学者。我有一些疑问。我将 Import-Csv cmdlet 用于从旧软件生成的制表符分隔文本文件。下面是分隔文件的等效版本。从文本文件中,我必须过滤那些具有 destination->observability§bin 为 1.
的条目Time [s] Offset_Angle destination->observability§bin
0.00E+00 -0.20402611670286 0.00000000000000E+00
4.32E+02 0.21319658757004 0.00000000000000E+00
8.64E+02 0.26803683992125 0.00000000000000E+00
1.30E+03 2.67379011780784 1.00000000000000E+00
1.73E+03 -2.89704767087971 1.00000000000000E+00
2.16E+03 -2.93302157473406 1.00000000000000E+00
代码片段如下
$ap = Import-Csv -Delimiter "`t" -Path E:\Myfiles\textfile.txt
$ap|where-Object {$_.destination->observability§bin -eq "1.00000000000000E+00”}
我让第一行工作了。当我执行第二行时,它会抛出一条错误消息。
At line:1 char:34
+ $ap|where-Object {$_.destination->observability§bin
+ ~
You must provide a value expression following the '-' operator.
At line:1 char:53
+ ... _.destination->observability§bin -eq '1.0000 ...
+ ~~~
Unexpected token '-eq' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedValueExpression
所以我猜它在输入参数中使用“-”符号作为运算符(字符 34)。我还尝试了一些转义字符,例如 - 符号前的反勾号 (`)。但是没有得到任何东西。请帮我解决这个问题。
谢谢。
您应该将其括在引号中:
$ap | Where-Object {$_."destination->observability§bin" -eq "1.00000000000000E+00"}
虽然您也可能对 §
字符有疑问
尝试使用 import-csv cmdlet 的 -header 子句为三个字段提供您自己的名称,并为它们命名合理。您可能需要对其进行编程以跳过 csv 的第一条记录,以防止实际的 header 被当作第一条记录来读取。
谢谢大家。在引号内添加名称没有用。当我将 header 名称更改为没有连字符和任何其他特殊字符的合法名称时,它起作用了