Backslashes in Powershell
Asked Answered
W

2

12

Why does the string for the -split parameter require two backslashes while the string for the -join parameter requires only one backslash? The backtick is the escape character in Powershell. What does a backslash preceding a character do for you?

$path = 'C:\folder\test\unit1\testing\results\report.txt'

$path -split '\\' -notlike '*test*' -join '\'

http://powershell.com/cs/blogs/tips/archive/2014/06/17/fun-with-path-names.aspx

Wamsley answered 23/6, 2014 at 20:29 Comment(0)
K
12

-split splits on a regex by default. So it is the regex that requires escaping a backslash. You can tell PowerShell not to use a regex like so:

$path -split '\',-1,'SimpleMatch'

-join is just taking whatever characters you supply to use as the delimiter to stick between the strings being joined.

Kassa answered 23/6, 2014 at 20:32 Comment(1)
To anyone wondering, -split can take up to 3 parameters: <delimiter>, <max-substrings>, <options>, so in Powershell <7.0, -split '\', -1, 'SimpleMatch' means to split on `\`, return all matches (max-substrings of 0 or lower returns all in PS <7.0), and use SimpleMatch instead of the default RegexMatch. Reference: learn.microsoft.com/en-us/powershell/module/…Koran
H
3

-split is accepting a regular expression where backslash is special character, so it need to be escaped

Hypso answered 23/6, 2014 at 20:32 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.