这可能真的很简单,但我似乎找不到答案。我正在寻找一种方法,只在文件夹的第二级中查找文件。
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}
如果您的文件夹名称包含空格,请改用此正则表达式:
^\\\\.*\\.*\\.*$
和
^.*\\.*\\.*\\.*$