我有一个脚本,当前正在执行以下操作,该脚本获取子目录中文件的完整路径:
$filenameOut = "out.html"
#get current working dir
$cwd = Get-ScriptDirectory
#get files to display in lists
$temp = Join-Path $cwd "Initial Forms"
$temp = Join-Path $temp "General Forms"
$InitialAppointmentGenArr = Get-ChildItem -Path $temp
因此,这将返回一个列表,其中数组中的第一个文件如下所示:
"//server/group/Creds/Documents/Initial Forms/General Forms/Background Check.pdf"
但是,要使生成的网页在Extranet上工作,我无法提供文件的完整路径。我只需要它返回:
"Initial Forms/General Forms/Background Check.pdf"
这是我可以在Extranet上使用的链接。如何获取get-childitem仅返回子路径?
我的脚本从
运行//server/group/Creds/Documents
我找不到类似的例子。我还想避免对脚本位置进行硬编码,以防脚本位置被移动。
答案 0 :(得分:1)
我建议采取以下措施:
$relativeDirPath = Join-Path 'Initial Forms' 'General Forms'
Get-ChildItem -LiteralPath $PSScriptRoot/$relativeDirPath | ForEach-Object {
Join-Path $relativeDirPath $_.Name
}
请注意,我已经用$PSScriptRoot
代替了$cwd
,因为听起来$PSScriptRoot
包含了脚本所在的目录,而该变量将自动报告Get-ChildItem
。
这是一个广义变体,也可以与递归使用$relativeDirPath = Join-Path 'Initial Forms' 'General Forms'
Get-ChildItem -LiteralPath $PSScriptRoot/$relativeDirPath | ForEach-Object {
$_.FullName.Substring($PSScriptRoot.Length + 1)
}
一起使用:
System.IO.Path
顺便说一句:在PowerShell Core 中,基础.NET Core框架的# PowerShell *Core* only.
PS> [IO.Path]::GetRelativePath('/foo/bar', '/foo/bar/bam/baz.txt')
bam/baz.txt
类型现在具有.GetRelativePath()
method,这是从中获取相对路径的便捷方法。绝对路径,通过参考路径:
dat1 = [["2019-01-01", 0],["2019-01-02",2],["2019-01-03", 5],["2019-01-04",10]];
dat1 = dat1.map(([date,L]) => [Date.parse(date), L]);
答案 1 :(得分:0)
简单的方法是简单地修剪不需要的路径,包括斜杠:
$filenameOut = "out.html"
#get current working dir
$cwd = Get-ScriptDirectory
#get files to display in lists
$temp = Join-Path $cwd "Initial Forms"
$temp = Join-Path $temp "General Forms"
$FullPath = Get-ChildItem -Path $temp
$InitialAppointmentGenArr = $FullPath | %{ $_.FullName.Replace($cwd + "\","")}