繁体   English   中英

存储在PowerShell中的变量中的字符串出现意外行为

[英]Unexpected behavior with a string stored in a variable in PowerShell

我从Excel的Cells.Find()方法中得到了一些奇怪的行为:

我正在搜索的变量:

PS > $volumename
vol_01       

PS > $volumename.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                                            
-------- -------- ----                                     --------                                                                                                                                            
True     True     String                                   System.Object 

没有结果:

PS > $sheet.Cells.Find($volumename).Row

但是如果我手动复制并粘贴该变量的值:

PS > $volumename = "vol_01"
PS > $volumename.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                                            
-------- -------- ----                                     --------                                                                                                                                            
True     True     String                                   System.Object 

获得我期望的值:

PS > $sheet.Cells.Find($volumename).Row
198

在我看来,它们似乎是完全相同的类型。 并非在所有情况下都如此。 一些卷名可以很好地通过,而另一些则不能。 我确实清除了该帖子的卷名,因为它具有客户命名约定。 它与上述格式相同,并且与有效的卷名相同。

以下代码段可用于检查字符串中是否包含隐藏的控制字符

PS> & { [int[]] [char[]] $Args[0] | % { '0x{0:x} [{1}]' -f $_, [char] $_ } } "vol_01`n"
0x76 [v]
0x6f [o]
0x6c [l]
0x5f [_]
0x30 [0]
0x31 [1]
0xa [
]

第一列是每个字符的Unicode代码点(“ ASCII代码”),第二列是字符本身,用[...]括起来

请注意,我在字符串的末尾添加了"`n" -一个换行符( U+000A -其代码点表示为十六进制。 数字是0xa

如果像您这样,字符串中唯一不需要的部分是尾随空格 ,则可以按以下方式删除它们:

$volumename.TrimEnd() # trim trailing whitespace

在您的情况下,尾随空格为0xa0 ,即NO-BREAK SPACE( U+00A0 ,正如Tom Blodget指出的那样, .TrimEnd()也将其删除。


基于上述的简单函数包装器 ,用于管道输入:

filter debug-Chars { [int[]] [char[]] $_ | % { '0x{0:x} [{1}]' -f $_, [char] $_ } }

样品使用:

"vol_01`n" | debug-Chars

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM