البرنامج النصي PowerShell لحذف الملفات غير المحددة في القائمة
-
18-09-2019 - |
سؤال
لدي قائمة بأسماء الملفات في ملف نصي مثل هذا:
f1.txt
f2
f3.jpg
كيف يمكنني حذف كل شيء آخر من مجلد باستثناء هذه الملفات في PowerShell؟
كود مزيف:
- اقرأ خط نص النص حسب الخط
- إنشاء قائمة بأسماء الملفات
- توزيع المجلد ومجلداتها الفرعية
- إذا لم يكن اسم الملف في القائمة، حذفه.
المحلول
بيانات:
-- begin exclusions.txt --
a.txt
b.txt
c.txt
-- end --
رمز:
# read all exclusions into a string array
$exclusions = Get-Content .\exclusions.txt
dir -rec *.* | Where-Object {
$exclusions -notcontains $_.name } | `
Remove-Item -WhatIf
مسح ال -WhatIf
التبديل إذا كنت سعيدا بنتائجك. -WhatIf
يوضح لك ما سيكون هل (أي أنها لن تحذف)
-
نصائح أخرى
إذا كانت الملفات موجودة في المجلد الحالي، فيمكنك القيام بذلك:
Get-ChildItem -exclude (gc exclusions.txt) | Remove-Item -whatif
يفترض هذا النهج كل ملف على خط منفصل. إذا كانت الملفات موجودة في المجلدات الفرعية، فسأذهب مع نهج Oisin.
في الواقع، يبدو أن هذا فقط يعمل في الدليل الأول بدلا من التركيب - يسترد البرنامج النصي الذي تم تغييره بشكل صحيح.
$exclusions = Get-Content .\exclusions.txt
dir -rec | where-object {-not($exclusions -contains [io.path]::GetFileName($_))} | `
where-object {-not($_ -is [system.IO.directoryInfo])} | remove-item -whatif
لا تنتمي إلى StackOverflow