1. ホーム
  2. powershell

[解決済み] Windows PowerShellでファイルが存在するかどうかをチェックする?

2022-03-05 05:37:47

質問

ディスクの2つの領域にあるファイルを比較し、最新のファイルを更新日の古いほうにコピーするスクリプトを作成しました。

$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
       }
}

以下は、files-to-watch.txtのフォーマットです。

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

これを、両方の領域にファイルが存在しない場合はこの処理を行わず、警告メッセージを表示するように修正したいと思います。 どなたか、PowerShellを使ってファイルが存在するかどうかをチェックする方法を教えていただけませんか?

解決方法は?

提供するもの 代替案 に対して Test-Path コマンドレット (誰も言及しなかったので)。

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

と(ほぼ)同じことをします。

Test-Path $path -PathType Leaf

ただし、ワイルドカード文字をサポートしていない