Unexpected behavior with a string stored in a variable in PowerShell

前端 未结 1 1077
南方客
南方客 2021-01-16 12:55

I\'m getting some odd behavior from Excel\'s Cells.Find() method:

Variable I\'m searching on:

PS > $volumename
vol_01       

PS >         


        
相关标签:
1条回答
  • 2021-01-16 13:46

    The following snippet can be used to inspect a string for hidden control characters:

    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 [
    ]
    

    The first column is each character's Unicode code point ("ASCII code"), and the second column the character itself, enclosed in [...]

    Note that I've added "`n" at the end of the string - a newline character (U+000A) - whose code point expressed as a hex. number is 0xa.

    If, as in your case, the only unwanted part of the string is trailing whitespace, you can remove them as follows:

    $volumename.TrimEnd() # trim trailing whitespace
    

    In your case, the trailing whitespace is 0xa0, the NO-BREAK SPACE (U+00A0), which .TrimEnd() also removes, as Tom Blodget points out.


    Simple function wrapper based on the above, for use with pipeline input:

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

    Sample use:

    "vol_01`n" | debug-Chars
    
    0 讨论(0)
提交回复
热议问题