উইন্ডোজ পাওয়ারশেলে কোনও ফাইল বিদ্যমান আছে কি নেই তা পরীক্ষা করে দেখুন?


112

আমার কাছে এই স্ক্রিপ্টটি রয়েছে যা ডিস্কের দুটি ক্ষেত্রের ফাইলগুলির সাথে তুলনা করে এবং পুরানো পরিবর্তিত তারিখের সাথে একটিতে সর্বশেষতম ফাইলটি অনুলিপি করে।

$filestowatch=get-content C:\H\files-to-watch.txt

$adminFiles=dir C:\H\admin\admin -recurse | ? { $fn=$_.FullName; ($filestowatch | % {$fn.contains($_)}) -contains $True}

$userFiles=dir C:\H\user\user -recurse | ? { $fn=$_.FullName; ($filestowatch | % {$fn.contains($_)}) -contains $True}

foreach($userfile in $userFiles)
{

      $exactadminfile= $adminfiles | ? {$_.Name -eq $userfile.Name} |Select -First 1
      $filetext1=[System.IO.File]::ReadAllText($exactadminfile.FullName)
      $filetext2=[System.IO.File]::ReadAllText($userfile.FullName)
      $equal = $filetext1 -ceq $filetext2 # case sensitive comparison

      if ($equal) { 
        Write-Host "Checking == : " $userfile.FullName 
        continue; 
      } 

      if($exactadminfile.LastWriteTime -gt $userfile.LastWriteTime)
      {
         Write-Host "Checking != : " $userfile.FullName " >> user"
         Copy-Item -Path $exactadminfile.FullName -Destination $userfile.FullName -Force
       }
       else
       {
          Write-Host "Checking != : " $userfile.FullName " >> admin"
          Copy-Item -Path $userfile.FullName -Destination $exactadminfile.FullName -Force
       }
}

এখানে ফাইলগুলি টু ওয়াচ.টেক্সটের ফর্ম্যাট রয়েছে

content\less\_light.less
content\less\_mixins.less
content\less\_variables.less
content\font-awesome\variables.less
content\font-awesome\mixins.less
content\font-awesome\path.less
content\font-awesome\core.less

আমি এটি সংশোধন করতে চাই যাতে ফাইল উভয় ক্ষেত্রে উপস্থিত না থাকে এবং একটি সতর্কতা বার্তা প্রিন্ট করে তবে এটি এটি করা এড়াতে পারে। কেউ আমাকে বলতে পারবেন যে আমি কীভাবে পাওয়ারশেল ব্যবহার করে কোনও ফাইল বিদ্যমান কিনা তা পরীক্ষা করে দেখতে পারি?

উত্তর:


199

কেবলমাত্র সেমিডলেটের বিকল্প প্রস্তাব দেওয়ার জন্য (যেহেতু কেউ এটি উল্লেখ করেনি):Test-Path

[System.IO.File]::Exists($path)

(প্রায়) একই জিনিস

Test-Path $path -PathType Leaf

ওয়াইল্ডকার্ড অক্ষরগুলির জন্য কোনও সমর্থন ছাড়াই



4
@ অরড হ্যাঁ, আমি এটি দেখেছি, উপেক্ষিত অস্তিত্বের () কল দিয়ে একটি উত্তর পোস্ট করেছি, তবে একই ইতিবাচক সাড়া পাওয়া যায়নি ;-)
ম্যাথিয়াস আর জেসেন

4
ব্যবহার [System.IO.File]::Existsএছাড়াও আপেক্ষিক পাথ ভিন্নভাবে সমাধান করা , এবং Test-Pathঅ filepaths (যেমন, রেজিস্ট্রি অবস্থানে) সঙ্গে ব্যবহার করা যাবে। ব্যবহার Test-Path
jpmc26

4
@ জেমি নেটিভ। নেট পদ্ধতিগুলি সাধারণত প্রক্রিয়াটির কার্যকরী ডিরেক্টরি সম্পর্কিত পাথগুলি সমাধান করে, অগত্যা পাওয়ারশেলের বর্তমান ফাইলসিস্টেম পাথের প্রয়োজন হয় না। আপনি করতে পারেন[System.IO.File]::($(Join-Path $PWD $path))
ম্যাথিয়াস আর জেসেন

4
এবং যদি আপনি এটি [System.IO.Directory]::Exists($path)ফোল্ডারগুলির জন্য অনুমান করেন না । উভয়ই আমার সিস্টেমে ইউএনসি পাথকে সমর্থন করে, তবে লুকানো শেয়ারগুলি করতে $"` $ "হিসাবে পথ থেকে রক্ষা পাওয়ার কথা মনে পড়ে
ক্রিস রুড

71

পরীক্ষার পথ ব্যবহার করুন :

if (!(Test-Path $exactadminfile) -and !(Test-Path $userfile)) {
  Write-Warning "$userFile absent from both locations"
}

উপরের কোডটি আপনার ForEachলুপে রাখলে যা করা উচিত তা করা উচিত



7

কোনও ফাইল বিদ্যমান কিনা তা দেখার স্ট্যান্ডার্ড Test-Pathউপায়টি সেমিডলেট সহ।

Test-Path -path $filename

6

আপনি Test-Pathসেমিডি-লেট ব্যবহার করতে পারেন । এরকম কিছু ...

if(!(Test-Path [oldLocation]) -and !(Test-Path [newLocation]))
{
    Write-Host "$file doesn't exist in both locations."
}

0
cls

$exactadminfile = "C:\temp\files\admin" #First folder to check the file

$userfile = "C:\temp\files\user" #Second folder to check the file

$filenames=Get-Content "C:\temp\files\files-to-watch.txt" #Reading the names of the files to test the existance in one of the above locations

foreach ($filename in $filenames) {
  if (!(Test-Path $exactadminfile\$filename) -and !(Test-Path $userfile\$filename)) { #if the file is not there in either of the folder
    Write-Warning "$filename absent from both locations"
  } else {
    Write-Host " $filename  File is there in one or both Locations" #if file exists there at both locations or at least in one location
  }
}

-4

পরীক্ষার পথটি বিজোড় উত্তর দিতে পারে। উদাহরণস্বরূপ "টেস্ট-পাথ সি: \ টেম্পের P -পথটাইপ পাতা" মিথ্যা দেয়, তবে "টেস্ট-পাথ সি: \ টেম্প * -পথটাইপ পাতা" সত্য দেয়। দু: খ :(

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