我运行命令(Get-Location),它返回文件的当前位置。
示例:c:\folder1\folder2\folder3\XXX\folder4\folder5
首先,从上面我想得到XXX的值,让它等于一个变量。我怎么能这样做?
其次,我希望得到c:\folder1\folder2\folder3\XXX\folder4\
的值,并让它等于一个变量。我怎么能这样做?
我已使用占位符folder1
,folder2
等进行说明。这些是动态的。
答案 0 :(得分:1)
首先回答你的第二个问题:要让父母走到完整路径,请使用Split-Path:
$var = Split-Path -parent "c:\folder1\folder2\folder3\XXX\folder4\folder5"
对于您的其他问题,此函数将拆分路径的所有元素并将它们返回到数组中:
function Split-Paths($pth)
{
while($pth)
{
Split-Path -leaf $pth
$pth = Split-Path -parent $pth
}
}
然后你可以像这样抓住第五个元素:
$xxx = (Split-Paths "c:\folder1\folder2\folder3\XXX\folder4\folder5")[-5]
请注意,该函数以“反向”顺序返回元素,因此您使用负索引从数组末尾开始索引。
答案 1 :(得分:1)
其中一些答案非常接近,但每个人都忘记了他们的shell-fu。
$FirstAnswer = (Get-Item ..\..).Name
$SecondAnswer = (Get-Item ..).FullName
答案 2 :(得分:0)
要将路径转换为变量,您可以执行以下操作:
$a = (Get-Location).Path
然后,如果要将路径的“XXX”部分的值设置为变量,可以使用split()函数:
$x = $a.split('\')[4]
答案 3 :(得分:0)
您可以使用正则表达式:
$rawtext = "If it interests you, my e-mail address is tobias@powershell.com."
# Simple pattern recognition:
$rawtext -match "your regular expression"
*True*
# Reading data matching the pattern from raw text:
$matches
$matches
返回结果。
有关详情,请查看 Chapter 13. Text and Regular Expressions (需要注册)。
答案 4 :(得分:0)
您可以使用正则表达式执行此操作:
PS> $path = 'c:\folder1\folder2\folder3\XXX\folder4\folder5'
PS> $path -match 'c:\\([^\\]+)\\([^\\]+)\\([^\\]+)\\([^\\]+)'
True
PS> $matches
Name Value
---- -----
4 XXX
3 folder3
2 folder2
1 folder1
0 c:\folder1\folder2\folder3\XXX