function Test-IsInPath
{
param( [string] $Path, [string] $Folder )
# we're going to treat the path as a csv record, but we
# need to know how many columns there are so we can create
# some fake header names. this might give a higher count
# than the real value if there *are* quoted folders with
# semicolons in them, but that's not really an issue
$columnCount = $Path.Length - $Path.Replace(";","").Length
# generate the list of column names. the actual names
# don't matter - it's just so ConvertFrom-Csv treats our
# PATH as a data row instead of a header row
$headers = 0..$columnCount
# parse the PATH as a csv record using ";" as a delimiter
$obj = $path | ConvertFrom-Csv -header $headers -delimiter ";"
# extract an array of all the values (i.e. folders)
# in the record we just parsed
$entries = $obj.psobject.properties.value
# check if the folder we're looking for is in the list
return $entries.Contains($Folder)
}
4条答案
按热度按时间cfh9epnr1#
Going off this question,你不需要一个函数,但可以用
$Env:Path
检索:-contains
运算符不区分大小写,这是一个额外的好处。将其放置在函数中以确保尾部斜杠被修剪可能是有用的,但这并不常见:20jt8wwn2#
有一堆答案做
$path.Split(";")
或$path -split ";"
可能对99.9%的现实世界场景都很好,* 但是 * 有一个关于the accepted answer的评论是Joey的一个类似问题:将失败,其中包含分号的引用路径。
基本上,这是一个边缘情况,但这是一个完全有效的
PATH
在Windows上:所以这里有一堆代码来解决这个问题
这是否是一个比简单的
split
方法“更好”的答案取决于您是否希望在PATH
中包含包含分号的引用文件夹:-)...示例用法:
注意事项
PATH
包含C:\temp\
时测试C:\temp
,反之亦然。rsaldnfx3#
我会选这样的
qacovj5a4#
您可以使用
[Environment]::GetEnvironmentVariables()
获取PATH或者,如果您想获取用户环境变量:
接下来,获取PATH变量:
然后检查指定的文件夹是否在PATH中:
功能组合:
但是,此函数区分大小写。您可以使用
String.ToLower()
使其不区分大小写。现在像这样调用你的函数:
请注意,路径必须是绝对路径。
正如mclayton的评论中指出的,这个函数对最后一个路径变量不起作用。要解决这个问题,只需在路径的末尾添加一个
;
。你的函数现在看起来像这样。