[英]How Get-Childitem and only include subfolders and files?
我有一个脚本,目前我执行以下操作,它获取子目录中文件的完整路径:
$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"
但是,为了让我生成的网页在我们的外联网上工作,我无法提供文件的完整路径。 我只需要它返回:
"Initial Forms/General Forms/Background Check.pdf"
这将是我可以在外联网上使用的链接。 如何让 get-childitem 只返回子路径?
我的脚本是从
//server/group/Creds/Documents
我找不到任何类似的例子。 我也想避免对脚本位置进行硬编码,以防它被移动。
简单的方法是简单地修剪不需要的路径,包括尾部斜杠:
$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 + "\","")}
我建议以下方法:
$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)
}
.GetRelativePath()
:在 PowerShell Core 中,底层 .NET Core 框架的System.IO.Path
类型现在有一个.GetRelativePath()
方法,这是一种通过引用路径从绝对路径获取相对路径的便捷方法:
# PowerShell *Core* only.
PS> [IO.Path]::GetRelativePath('/foo/bar', '/foo/bar/bam/baz.txt')
bam/baz.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.