如何获取子项并且仅包含子文件夹和文件?

时间:2019-04-05 15:32:59

标签: powershell file get-childitem subdirs

我有一个脚本,当前正在执行以下操作,该脚本获取子目录中文件的完整路径:

$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

我找不到类似的例子。我还想避免对脚本位置进行硬编码,以防脚本位置被移动。

2 个答案:

答案 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 + "\","")}