Split-Path和-split操作符

本文详细介绍了PowerShell中用于路径处理的Split-Path cmdlet,以及字符串分割操作符 `-split` 和 `.split()` 方法的用法,帮助你更好地理解和运用这些功能进行文件路径解析和字符串分割。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Split-Path

功能:返回路径的指定部分,如父目录,子目录,文件名。也可以获取分割路径指向的对象。以及区分路径是否是绝对路径。

实例:
#返回路径的限定符。
Split-Path -Path "HKCU:\Software\Microsoft" -Qualifier#结果 HKCU:
Split-Path -Path "D:\Software\Microsoft" -Qualifier #结果为 D:
Split-Path -Path "D:\Software\Microsoft" -NoQualifier #上述的补操作。结果为\Software\Microsoft
#获取路径的最后一部分(文件名)
Split-Path -Path "C:\Test\Logs\*.log" -Leaf -Resolve #输出C:\Test\Logs所有的.log文件。
#-Leaf参数说明获取路径的最后一部分。-Resolve参数指明显示分割结果对应的对象(a.log,bb.log),而分割结果(*.log)

#获取文件的父目录
Split-Path -Path "C:\WINDOWS\system32\WindowsPowerShell\V1.0\about_*.txt" #使用默认分割位置,parent。
#结果C:\WINDOWS\system32\WindowsPowerShell\V1.0

#判顶路径是否时绝对路径,结果为布尔值
Split-Path -Path ".\My Pictures\*.jpg" -IsAbsolute#结果:False

#前往一个指定目录
Set-Location (Split-Path -Path $profile) #$profile是内置变量。存储一个文件的绝对路径。Split-Path前往父目录,Set-Location前往这个目录。cd是Set-Location的别名。

#接收管道作为参数
'C:\Documents and Settings\User01\My Documents\My Pictures' | Split-Path #结果C:\Documents and Settings\User01\My Documents

#返回扩展名或者不带扩展名的文件名
Split-Path  -Path "E:\temp\aa.txt"  -Extension  #注意:powershell 6极其后面的版本才支持此参数。结果:.txt
 Split-Path  -Path "E:\temp\aa.txt"  -LeafBase #同上。需要powershell6.0及其后面的版本。结果:aa

-split操作符

说明:
split操作符把一个或多个串分割成子串。
1.分隔符:默认是空白符,包括空格,不可打印字符(如换行符,\t等)。可以指定字符,字符串,模式做分隔符;或者在脚本块中指定。注意:split操作符在分隔符()匹配时使用正则表达式。
2.子串的最大数目:默认返回所有子串。若指定的数目小于子串的数目,多余的串会被连接到最后一个字符串后。(限定字串的最大数目,就可以间接的限定分割的次数)
3.选项:指明条件。如简单匹配,多行匹配。注意:选项有效,只有指定子串的最大数目时,才有效。

语法:
参数名不会出现,只出现参数值。当分隔符规则使用时:-iSplit和-split不区分大小写。只有-cSplit区分大小写。
-Split <String> 
-Split (<String[]>)
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]

实例:
-split "red yellow blue green" #串也可以是多行。
结果:
red
yellow
blue
green

#指明分隔符,默认分隔符是空白符:空格和不可打印的字符,如`n(换行),`t(tab键)
"Lastname:FirstName:Address" -split ":" #默认结果中不显示分隔符
结果:
Lastname
FirstName
Address

"Lastname:FirstName:Address" -split "(:)" #用括号包裹的分隔符会留在输出结果中。
Lastname
:
FirstName
:
Address

"Lastname/:/FirstName/:/Address" -split "/(:)/" # :留在结果中
Lastname
:
FirstName
:
Address

"Lastname/:/FirstName/:/Address/:/ddddd" -split "(/:)/",2 #/:留在结果中
Lastname
/:
FirstName/:/Address/:/ddddd


#可指明要返回的子串的最大数目。默认是所有子串。若指明的数比实际分割出来的小,
#则多余的会连接在最后一个串中
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
$c -split ",", 5   #用逗号隔开。首先指明分隔符是逗号,再指明返回5个字串。指明子串值为0,相当于不指定。数字为负数,powershell 7才支持。
结果:
Mercury
Venus
Earth
Mars
Jupiter,Saturn,Uranus,Neptune  #多余的字串连在了最后一个串上。

#对于多个串,操作符会应用到每个串。
$c = 'a,b,c','1,2,3,4,5'
$c -split ',', 3
结果:
a
b
c
1
2
3,4,5

#powershell 7才支持最大串数目为负数。从后往前分割,但结果仍从前往后输出
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
$c -split ",", -5

#分隔符可以是一个表达式,该表达式指明一个规则。
#表达式用中括号包括起来,表达式的结果是布尔值。
#此时匹配规则是简单匹配
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
$c -split {$_ -eq "e" -or $_ -eq "p"} #e和p字符是分隔符,$_代表当前字符
结果:
M
rcury,V
nus,
arth,Mars,Ju
it
r,Saturn,Uranus,N

tun

#对于多个对象的分割,防止优先级问题,最后用圆括号直接指明优先级

#分隔符是一个字符串,此时匹配原则:正则匹配
"aa\\bb" -split '\\\\'  #结果:aa和bb

#区分大小写的分割
"abaBa" -cSplit 'b' #结果:a和aBa

#分隔符可以是正则表达式
"Uranus,Neptune" -split '[er]'
U
anus,N
ptun

#对多个串执行分割操作
"a,b,c,d", "e,f,g,h" -split ",", 3
a
b
c,d
e
f
g,h

#对一个多行的串进行分割
$a = @'
1The first line.
2The second line.
3The third of three lines.
'@
$a -split "^\d", 0, "multiline" #只有最大串数目指明,multiline参数才会有效。同时0表示返回所有的子串。

#明确指明使用简单匹配
"This.is.a.test" -split ".", 0, "simplematch" #同样,只有最大串数目指明,simplematch参数才会有效。"This.is.a.test" -split "\."结果一致
This
is
a
test

#根据条件,选择分隔符
$i = 1
$c = "LastName, FirstName; Address, City, State, Zip"
$c -split $(if ($i -lt 1) {","} else {";"})
结果:
LastName, FirstName
Address, City, State, Zip

.split()方法

语法:
.Split(strSeparator [, MaxSubstrings] [, Options])

strSeparator:分隔符。默认是空格,换行符,\tab。
实例
("C:\a!a\b/b").split("/!\")   #多个分隔符,执行或操作。
C:
a
a
b
b


("C:\a!a\b/b").split("/!\")[0]  #获取分割结果的第一部分。类似数组下标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值