使用 Get-ChildItem 但只查看第二级

使用 Get-ChildItem 但只查看第二级

这可能真的很简单,但我似乎找不到答案。我正在寻找一种方法,只在文件夹的第二级中查找文件。

IE

数据目录

C:\数据\级别1

C:\数据\级别1\级别2\

我只想查看第二级,即上例中的 C:\Data\Level1\Level2\。

我错过了什么?

目前,我正在使用这个脚本,我想修改它以仅查看第二级并忽略第一级。

Get-ChildItem '\\nas2\files\-- TV --\*\*' | Where-Object {$_.Name -eq 'folder.jpg'} | ForEach-Object {
$CurrentFolder = $_.Directory
if ((Test-Path "$CurrentFolder\show.jpg") -eq $false)
{Copy-Item $_ "$CurrentFolder\show.jpg"}
Remove-Variable CurrentFolder}

谢谢您的帮助

答案1

下面将针对 \Nas1\folder1\folder2 和 c:\folder1\folder2 两种情况检查文件夹的第二级。基本上,正则表达式中的每个 \\\S* 都是一个级别。

编辑:添加了额外的检查以确保 2 级文件夹包含名为 folder.jpg 的文件。

Get-ChildItem 'c:\temp' -recurse | `
Where-Object {($_.directoryname -match '^\\\\\S*\\\S*\\\S*$' -or $_.directoryname -match '^\S*\\\S*\\\S*\\\S*$') -and $_.Name -eq 'folder.jpg'} `
| ForEach-Object {
$CurrentFolder = $_.Directory
if ((Test-Path "$CurrentFolder\show.jpg") -eq $false)
{Copy-Item $_ "$CurrentFolder\show.jpg"}
Remove-Variable CurrentFolder}

如果您的文件夹名称包含空格,请改用此正则表达式:

^\\\\.*\\.*\\.*$ 

^.*\\.*\\.*\\.*$

相关内容