powershell 将双引号内的字符串拆分为数组

q5lcpyga  于 2023-04-12  发布在  Shell
关注(0)|答案(3)|浏览(139)

给定一个字符串,其中每个路径都在双引号内引用,我如何将其拆分为一个数组,每个项目都是双引号内的文字子串。例如:

$input=read-host "input"; $input.Split(" ")

对于"D:\Path1\file1.txt" "D:\Path2\some [ weird, name.txt""D:\thispath\is_not_separated_by_space_after_quote.txt"的输入字符串,只要找到空格,它就会拆分字符串,而不是引号感知的(尽管不认为这是一个单词)。

D:\Path1\file1.txt
D:\Path2\some [ weird, name.txt
D:\thispath\is_not_separated_by_space_after_quote.txt

没有双引号。有什么想法如何实现这一点吗?提前感谢。

tpgth1q7

tpgth1q71#

这是为那些不喜欢使用正则表达式的人准备的方法,但我相信它在这里应该可以工作。

$input.Replace('""','" "').replace('" "','","').split(',').replace('"','')

你要确保每两个相邻的引号之间有一个空格,加上这个空格,你的方法应该可以了吧?

gr8qqesn

gr8qqesn2#

使用-split和regex的替代方案:

$string = '"D:\Path1\file1.txt" "D:\Path2\some [ weird, name.txt""D:\thispath\is_not_separated_by_space_after_quote.txt"'
$string -split '(?<=")\s*(?=")' | ForEach-Object Trim('"')

详情请参见https://regex101.com/r/lKyxJ0/1

kadbb459

kadbb4593#

对于所有可能的字符串组合,这些答案都没有像我预期的那样工作,引号和not的混合很难处理。最后放弃并使用cmd,因为它已经准备好了这样做。我知道这是一个copout,但实际上应该有一个commandlet来做这件事。$input将是所有参数的数组。

$UninstallString = "`"C:\Program Files (x86)\InstallShield Installation Information\{58C01E5D-F72B-4C0C-8025-E929D6070B6D}\setup.exe`" -runfromtemp -l0x0409  -removeonly"
$input = @(cmd /c "for %i in ($UninstallString) do @echo %~i")

$input.Count
$input

相关问题