簡體   English   中英

如何使用 PowerShell 從名稱不包含 CSV 中列出的字符串的文件夾中刪除所有文件

[英]How to delete all the files from folder where name does not include string listed in CSV using PowerShell

我想從名稱不包括 CSV 中列出的 SKU 的文件夾中刪除所有文件。

如果 SKU 與文件庫完全匹配,則此方法有效,但我也希望保留包含 SKU 的圖像。 例如,如果 SKU 是“1-526-2”,則不應刪除名稱為“1-526-2_1.jpg”和“1-526-2_2.jpg”的文件。 你能以某種方式在 SKU 周圍添加通配符嗎?

嘗試使用這個:

$filestokeep = import-csv "C:\Users\exmaple\csv.csv" -Header sku).sku
$files = "C:\users\folder"

$data = Get-ChildItem $files -Recurse |
     Where-Object {$filestokeep  -notcontains $_.basename} |
        Remove-Item -WhatIf

示例 CSV:

"SKU"
"1-526-2"
"2-1234"
"1-6435"

文件夾中的示例文件:

1-123.jpg
1-123_1.jpg
1-526-2.jpg
1-526-2_1.jpg
1-6435_2.jpg
2-1234.jpg
5-16547-5.jpg

現在的結果是:

"Remove File" on target "C:\Users\folder\1-123.jpg".
"Remove File" on target "C:\Users\folder\1-123_1.jpg".
"Remove File" on target "C:\Users\folder\1-526-2_1.jpg".
"Remove File" on target "C:\Users\folder\1-6435_2.jpg".
"Remove File" on target "C:\Users\folder\5-16547-5.jpg".

結果應該是:

"Remove File" on target "C:\Users\folder\1-123.jpg".
"Remove File" on target "C:\Users\folder\1-123_1.jpg".
"Remove File" on target "C:\Users\folder\5-16547-5.jpg".

為此,我將使用 regex -match運算符:

$sourceFolder = "C:\users\folder"
$filestokeep  = (Import-Csv "C:\Users\exmaple\csv.csv" -Header sku).sku

# create a regex string of the filestokeep array combining the
# strings with regex OR (`|`). Use [regex]::Escape() to escape any characters
# that have special meaning in regex.
# in this example "^(1-526-2|2-1234|1-6435)"
# the "^" anchors the match at the beginning of the string
$keepThese = '^({0})' -f (($filestokeep | ForEach-Object { [regex]::Escape($_) }) -join '|')

Get-ChildItem -Path $sourceFolder -Filter '*.jpg' -Recurse -File |
     Where-Object {$_.BaseName -notmatch $keepThese} |
        Remove-Item -WhatIf

Output:

What if: Performing the operation "Remove File" on target "C:\users\folder\1-123.jpg".
What if: Performing the operation "Remove File" on target "C:\users\folder\1-123_1.jpg".
What if: Performing the operation "Remove File" on target "C:\users\folder\5-16547-5.jpg".

PS Remove-Item cmdlet 不返回任何 output,因此無需嘗試使用$data =捕獲它

暫無
暫無

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

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