簡體   English   中英

powershell-使用文件名列表刪除文件

[英]powershell - delete files using list of file names

我從堆棧溢出中獲得了以下代碼,並且工作正常。

$TargetFolder = “Pathofyourfolder”
$Files = Get-ChildItem $TargetFolder -Exclude (gc List.txt)  -Recurse
foreach ($File in $Files)
{ 
    write-host “Deleting File $File” -foregroundcolor “Red”;
    Remove-Item $File | out-null
}

現在,我要刪除列表中具有文件名的文件。 我嘗試了上述方法的一些變體,例如用Include替換Exclude,但沒有成功。 有人可以幫忙嗎?

$targetFolder = "D:\TEST_123"
$fileList = "D:\DeleteList.txt"

Get-ChildItem -Path "$targetFolder\*" -Recurse -Include @(Get-Content $fileList) | Remove-Item -Verbose

為了使-Include起作用,您應該在刪除列表的文件夾名稱和文件名末尾指定\\* 上面的代碼對我有用,僅刪除文件夾及其所有子文件夾中的指定文件。

我還使用-Verbose代替了foreachWrite-Host

為了簡化n01d的有用答案

您可以直接使用Remove-Item

Remove-Item $TargetFolder\* -Recurse -Include (Get-Content List.txt) -Verbose

注意$TargetFolder后面的必需\\*

-Include-Exclude可能會非常棘手(見這個答案我的),但-Include應該在這里工作,只要List.txt包含單純的文件名 (沒有路徑組件)。

就像n01d的答案一樣, -Verbose旨在用Write-Host調用替換顯式的foreach循環。

還要注意, Remove-Item不會向輸出流寫入任何內容,因此沒有理由將其通過管道傳遞給Out-Null

我發現-Include參數實際上在大多數情況下並沒有像您期望的那樣工作。

因此,我建議使用此代碼以使其快速運行。

$TargetFolder = “Pathofyourfolder”
$Files = Get-ChildItem $TargetFolder -Recurse| Where Name -in (gc List.txt) 
foreach ($File in $Files)
{ 
    write-host “Deleting File $File” -foregroundcolor “Red”;
    Remove-Item $File | out-null
}

如果願意,可以使用-include加快它的速度,但是我坦率地認為它很爛,而且可以。

您可以嘗試以下方法:

 Get-Content .\filesToDelete.txt | ForEach-Object {Remove-Item $_}

它更簡單,更容易解釋( $_代表for循環的當前變量)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM