البرنامج النصي PowerShell لحذف الملفات غير المحددة في القائمة

StackOverflow https://stackoverflow.com/questions/2009955

سؤال

لدي قائمة بأسماء الملفات في ملف نصي مثل هذا:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top