নামে বন্ধনী [] নামের ডিরেক্টরিগুলি পাওয়ারশেলের মোছা হচ্ছে


0

এখানে প্রথমবারের জন্য পাওয়ারশেল ব্যবহার করা হচ্ছে, সুতরাং দয়া করে আমার উপর সহজ হয়ে যান ...

আমি একটি স্ক্রিপ্ট লিখেছি যা ডিরেক্টরি যাচাই করে এবং কোনও ডিরেক্টরি ডিরেক্টরিতে খালি থাকে, এটি মুছতে হবে। আমার যে সমস্যাটি হচ্ছে তা হ'ল ডিরেক্টরি নামের ব্র্যকেটগুলি -> [] সহ directories ডিরেক্টরিটি খালি না হলেও, এটি এখনও মুছে ফেলা হচ্ছে। কেউ সাহায্য করতে পারেন? আমি যে কোডটি ব্যবহার করছি তা এখানে:

$path = "C:\path\to\directory"
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse

আমি উপরের কোডটি পুরোপুরি বুঝতে পারি না, আমি এটি অনলাইনে খুঁজে পেয়েছি। কিন্তু এটি এমন ডিরেক্টরিগুলির জন্য কাজ করছে যা বন্ধনী নেই।

" সামারফোটস " নামের একটি ডিরেক্টরিতে যে কোনও ফাইল রয়েছে, ডিরেক্টরিটি মুছে ফেলা হয় না। -> ভাল

যে ডিরেক্টরিটি খালি রয়েছে তার জন্য এটি মুছে ফেলা হয়েছে। -> ভাল

" সামারফোটস [২০০৯] " নামের একটি ডিরেক্টরিতে এটি ফাইল থাকা সত্ত্বেও এটি মুছে ফেলা হচ্ছে। -> খারাপ

আমি গুগল করেছিলাম এবং পড়েছিলাম যে পাওয়ারশেল বন্ধনীগুলিকে ওয়াইল্ডকার্ড হিসাবে ব্যবহার করে, তবে কীভাবে এটি ঘটাব সে সম্পর্কে আমি নিশ্চিত নই। কোন সাহায্য প্রশংসা করা হবে।

ধন্যবাদ!


আপনি যদি খালি খালি ডিরেক্টরিগুলি সরাতে না চান তবে আপনি কেন -Recurseপ্রথম স্থানে ব্যবহার করছেন ?
মাধ্যাকর্ষণ

PowerShell পান-ChildItem সালে []একটি সীমার বোঝাতে, এড়াতে এই ব্যবহার করবেন না -Pathকিন্তু -LiteralPathকোথায়-Ob ject ভিতরে
LotPings

@ গ্রাভিটি পুনরাবৃত্তি না হলে কিছু সজ্জিত ডিরেক্টরিগুলির সর্বশেষ কীভাবে পাবেন?
লটপিংস

উত্তর:


3
  • PowerShell পান-ChildItem সালে []একটি সীমার বোঝাতে, এড়াতে এই ব্যবহার করবেন না -Pathকিন্তু -LiteralPathভিতরেWhere-Object
  • $env:pathএকটি ভিন্ন পরিবর্তনশীল নাম চয়ন করে সম্ভাব্য জ্বালা এড়াতে ।

$Mypath = "C:\path\to\directory"
Get-ChildItem -Path $Mypath -Recurse -Force | 
  Where-Object { $_.PSIsContainer -and (Get-ChildItem -LiteralPath $_.FullName -Recurse -Force | 
                                        Where-Object { !$_.PSIsContainer }) -eq $null } | 
    Remove-Item -Force -Recurse -Confirm

আরও সাম্প্রতিক পাওয়ারশেল সংস্করণগুলিতে আপনি Get-ChildItemপরামিতিগুলি ব্যবহার করতে পারেন -Directoyএবং -Fileতার পরিবর্তেWhere {$_.PSIsContainer}

$Mypath = "C:\path\to\directory"
Get-ChildItem -Path $Mypath -Recurse -Force -Directory -EA 0 | 
  Where-Object { (Get-ChildItem -LiteralPath $_.FullName -Recurse -Force -File -EA 0 ) -eq $null } | 
    Remove-Item -Force -Recurse -Confirm

  • -EA 0 এর জন্য একটি সংক্ষেপণ -ErrorAction SilentlyContinue
  • পরীক্ষার সময় আমি ব্যবহার করতে -WhatIfবা -Confirmসরান-আইটেমের সেমিডলেট ব্যবহারের পরামর্শ দিই

আরে যে সুন্দরভাবে কাজ করেছে। অনেক ধন্যবাদ!!!
ডি হিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.