トップ回答者
Power Shell _ Foreachの中で削除処理したファイルの件数をカウントする方法

質問
-
回答
-
チャブーンです。
この件、「やりたいこと」がタイトルにあった、ということなのですね。失礼しました。PowerShellですが、Get-ChildItemでオブジェクト化したものを、メソッド .delete()で削除すると、.exsistsプロパティで削除の有無を確認できます。これを使うと、うまくいくのではないでしょうか?
$RootDir="<ルートフォルダーパス>" $DeletedItems=@() $DeleteTargets=Get-ChildItem $RootDir Foreach ($DeleteTarget in $DeleteTargets) { $DeleteTarget.delete() $DeleteTarget.refresh() $DeletedItems += $DeleteTarget.exists Write-Host $DeleteTarget.fullname は現在 $DeleteTarget.exists です。 } Write-Host 削除されたファイル数は ($DeletedItems|Where {$_ -eq $false}).count です。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
すべての返信
-
Remove-Itemコマンドレットは戻り値なしのようです。
カウンターを0で初期化し、Remove-Itemコマンドレットで削除処理が行われた場合のみ、インクリメント(+1)
するのはいかがでしょうか?以下のようなコードです。
####################################
# カレントディレクトリにtest1~test5を作成
$Targets = ("test1", "test2", "test3", "test4", "test5")
foreach($i in $Targets){
New-Item $i -Force
}
# カウンターを初期化
$count = 0
foreach($i in $DeleteTarget)
{
# 削除処理
# 今回はtest1とtest2だけを削除する。削除後にカウンターをインクリメント
if ($i -eq "test1" -or "test2")
{
Remove-Item $i -Recurse
$count ++
}
# ログ出力
Write-Host "$iを削除しました"
}
Write-Host "削除件数 ${count}件"####################################
-
チャブーンです。
この件ですが、現時点では単純に「構文ミス」のように思います。
foreach($DeleteTarget IN $DeleteTarget)
ですが、Foreach ($a in $b) の場合、$bは必ず配列、$aは要素になります。この文脈では配列と要素に同じ変数名を使おうとしているので、おかしなことになっているのかと思います。
そうではない、ということなら、最小限のソースと(実行時の)エラーメッセージ全文や「期待しなかった結果」情報がないと、誰も答えられないと思います。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
-
チャブーンです。
この件、「やりたいこと」がタイトルにあった、ということなのですね。失礼しました。PowerShellですが、Get-ChildItemでオブジェクト化したものを、メソッド .delete()で削除すると、.exsistsプロパティで削除の有無を確認できます。これを使うと、うまくいくのではないでしょうか?
$RootDir="<ルートフォルダーパス>" $DeletedItems=@() $DeleteTargets=Get-ChildItem $RootDir Foreach ($DeleteTarget in $DeleteTargets) { $DeleteTarget.delete() $DeleteTarget.refresh() $DeletedItems += $DeleteTarget.exists Write-Host $DeleteTarget.fullname は現在 $DeleteTarget.exists です。 } Write-Host 削除されたファイル数は ($DeletedItems|Where {$_ -eq $false}).count です。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
-
チャブーンです。
Hongliangさん、ありがとうございます。ひとまずディレクトリ数も数え、かつ分けて数える前提で、書いてみました。かなり美しくないスクリプトですが。
$RootDir="<ルートフォルダーパス>" $DeletedItems=@() $DeletedDirectories=@() $DeleteTargets=Get-ChildItem $RootDir -recurse Foreach ($DeleteTarget in ($DeleteTargets|Where {$_.attributes -ne "Directory"})) { $DeleteTarget.delete() $DeleteTarget.refresh() $DeletedItems += $DeleteTarget.exists Write-Host $DeleteTarget.fullname は現在 $DeleteTarget.exists です。 } Foreach ($DeleteTarget in ($DeleteTargets|Where {$_.attributes -eq "Directory"})) { $DeleteTarget.delete() $DeleteTarget.refresh() $DeletedDirectories += $DeleteTarget.exists Write-Host $DeleteTarget.fullname は現在 $DeleteTarget.exists です。 } Write-Host 削除されたファイル数は ($DeletedItems|Where {$_ -eq $false}).count です。 Write-Host 削除されたディレクトリ数は ($DeletedDirectories|Where {$_ -eq $false}).count です。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。