Get-ChildItemを使用するが、2番目のレベルだけを見る


0

これはおそらく非常に簡単ですが、答えが見つからないようです。ファイルのフォルダーの2番目のレベルだけを調べる方法を探しています。

すなわち

C:\ Data

C:\ Data \ Level1

C:\ Data \ Level1 \ Level2 \

2番目のレベル、つまり上記の例のC:\ Data \ Level1 \ Level2 \のみを確認します。

私は何が欠けていますか?

現在、私はこのスクリプトを使用しており、2番目のレベルだけを見て最初のレベルを無視するように修正したいと思います。

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}

助けてくれてありがとう

回答:


0

以下は、\ Nas1 \ folder1 \ folder2とc:\ folder1 \ folder2の両方のケースのフォルダーの第2レベルをチェックします。基本的に、正規表現の各\\\ 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}

スペースを含むフォルダー名がある場合は、代わりに次の正規表現を使用します。

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

そして

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

これをありがとう。ここに何かが足りませんか?folder.jpgを探す場所がわかりません。たぶん、今私がマルチタスクをしようとしているだけなのかもしれません。少し後で確認します。
JoshFink

確かに、そうではなく、第2レベルの問題に焦点を当てながらその部分を見落としていました。できるだけ早く追加します。
ミッキーバラデリ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.