回答編集履歴
5
微修正
answer
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
---
|
9
9
|
追記:
|
10
10
|
|
11
|
-
指定フォルダのパスに除外フォルダと同名のフォルダが含まれている
|
11
|
+
もし指定フォルダのパスに除外フォルダと同名のフォルダが含まれている場合は以下のようにするとうまくいくかと思います。(`$parent_folder`はフルパスだと仮定します。)
|
12
12
|
|
13
13
|
```PowerShell
|
14
14
|
Get-ChildItem $parent_folder -File -Recurse | Where-Object FullName -notlike "$parent_folder*\Online*"
|
4
微修正
answer
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
指定フォルダのパスに除外フォルダと同名のフォルダが含まれているということなので以下のようにするとうまくいくかと思います。(`$parent_folder`はフルパスだと仮定します。)
|
12
12
|
|
13
13
|
```PowerShell
|
14
|
-
Get-ChildItem $parent_folder -File -Recurse
|
14
|
+
Get-ChildItem $parent_folder -File -Recurse | Where-Object FullName -notlike "$parent_folder*\Online*"
|
15
15
|
```
|
16
16
|
---
|
17
17
|
|
@@ -41,4 +41,4 @@
|
|
41
41
|
```PowerShell
|
42
42
|
lsx $parent_folder -Exclude "hoge","fuga"
|
43
43
|
```
|
44
|
-
複数の除外フォルダ名を指定できます。
|
44
|
+
この例では複数の除外フォルダ名を指定できます。ワイルドカード指定はできません。
|
3
指定パスに除外フォルダ名が含まれている場合の追記
answer
CHANGED
@@ -3,9 +3,18 @@
|
|
3
3
|
簡単な解決策は`Where-Object`を使ってアイテムの`FullName`プロパティを対象にフィルタリングすることです。
|
4
4
|
|
5
5
|
```PowerShell
|
6
|
-
Get-ChildItem -File -Recurse | Where-Object FullName -NotLike *\Online*
|
6
|
+
Get-ChildItem $parent_folder -File -Recurse | Where-Object FullName -NotLike *\Online*
|
7
7
|
```
|
8
|
+
---
|
9
|
+
追記:
|
8
10
|
|
11
|
+
指定フォルダのパスに除外フォルダと同名のフォルダが含まれているということなので以下のようにするとうまくいくかと思います。(`$parent_folder`はフルパスだと仮定します。)
|
12
|
+
|
13
|
+
```PowerShell
|
14
|
+
Get-ChildItem $parent_folder -File -Recurse | Where-Object FullName -notlike "$parent_folder*\Online*"
|
15
|
+
```
|
16
|
+
---
|
17
|
+
|
9
18
|
この方法は一旦除外フォルダ以下のアイテムも全て拾った後にフィルタリングします。
|
10
19
|
よって、除外フォルダ以下に大量のファイルがある場合は、無駄な処理が多くなりパフォーマンスが悪くなることが欠点です。
|
11
20
|
|
2
若干の高速化
answer
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
簡単な解決策は`Where-Object`を使ってアイテムの`FullName`プロパティを対象にフィルタリングすることです。
|
4
4
|
|
5
5
|
```PowerShell
|
6
|
-
Get-ChildItem -File -Recurse | Where-Object FullName -NotLike *\
|
6
|
+
Get-ChildItem -File -Recurse | Where-Object FullName -NotLike *\Online*
|
7
7
|
```
|
8
8
|
|
9
9
|
この方法は一旦除外フォルダ以下のアイテムも全て拾った後にフィルタリングします。
|
@@ -16,10 +16,11 @@
|
|
16
16
|
|
17
17
|
$stack = [Collections.Generic.Stack[object]]::new(@($Path))
|
18
18
|
$temp = [Collections.Generic.List[object]]::new()
|
19
|
+
$getChildItem = $ExecutionContext.InvokeProvider.ChildItem.Get
|
19
20
|
|
20
21
|
while ($stack.Count) {
|
21
22
|
$temp.Clear()
|
22
|
-
foreach ($item in
|
23
|
+
foreach ($item in $getChildItem.Invoke($stack.Pop(), $false, $false, $true)) {
|
23
24
|
if ($item.PSIsContainer) { if ($item.PSChildName -notin $ExcludeDir) { $temp.Add($item.PSPath) } }
|
24
25
|
else { $item }
|
25
26
|
}
|
1
微修正
answer
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
while ($stack.Count) {
|
21
21
|
$temp.Clear()
|
22
22
|
foreach ($item in Get-ChildItem -LiteralPath $stack.Pop()) {
|
23
|
-
if ($item.PSIsContainer) { if ($item.
|
23
|
+
if ($item.PSIsContainer) { if ($item.PSChildName -notin $ExcludeDir) { $temp.Add($item.PSPath) } }
|
24
24
|
else { $item }
|
25
25
|
}
|
26
26
|
foreach ($dir in $temp[($temp.Count - 1)..0]) { $stack.Push($dir) }
|