PowerShell にファイルが存在する場合は削除項目

Marion Paul Kenneth Mendoza 2023年6月20日
PowerShell にファイルが存在する場合は削除項目

管理者として考えられる業務の 1つは、おそらくファイルの管理でしょう。 この状況は通常、複数のファイル サーバーを管理している場合に発生します。

サーバー内で実行できる特定のタスクの 1つは、ファイルを別の場所にコピーして、おそらく会社のファイルのコピーまたはミラーを作成することです。

ただし、一括コピーを一度に実行する必要がある場合はどうすればよいでしょうか。 一括コピー中に、宛先の場所に既存のファイルが存在する可能性もあります。

この記事では、PowerShell を使用してファイルを一括コピーし、コピー先フォルダーに存在するかどうかを確認し、削除する方法について説明します。

PowerShell のCopy-Itemの後にファイルが存在する場合はRemove-Item

この記事では、Get-ChildItemRemove-Item、および Copy-Item コマンドに焦点を当てて使用します。 ファイルを一括でコピーし、宛先フォルダーに存在するかどうかを確認できるスクリプト ブロックを共有します。存在する場合は、ファイルが削除されて上書きされます。

そのため、以下のようにソース フォルダーと宛先フォルダーを宣言し、ドリルダウンしてスクリプト ブロックについて詳しく説明します。

コード例:

$sourceFolder = "C:\Temp"
$destFolder = "C:\PS"

Get-ChildItem $sourceFolder\Scripts -Recurse | %{
    Remove-Item $_ -ErrorAction Ignore
  	Copy-Item -Path $_.FullName -Destination $destFolder
}
  1. まず、$sourceFolder 変数と $destFolder 変数のように、各変数内でソース フォルダーと宛先フォルダーを宣言します。

  2. 次に、Get-ChildItem コマンドを使用してフォルダー内のすべてのファイルを取得し、それらを配列リストに配置します。 Get-ChildItem コマンドは、複数のフォルダーにも対応できます。

    複数のフォルダーを確認するには、以下のスニペットのように宛先の間にカンマ (,) を挿入します。

    Get-ChildItem $sourceFolder\Scripts, $sourceFolder\Test
    

    -Recurse パラメーターは、親ソース フォルダーのサブフォルダー内にもあるファイルをチェックするために使用されます。

  3. 次に、Remove-Item コマンドを使用して、既存のファイルを削除します。 ご覧のとおり、エラーが発生した場合のアクション設定を設定する -ErrorAction というパラメーターを使用しました。

    この場合、エラーが発生すると、ファイルは宛先ファイルに存在しません。 アクション設定は Ignore に設定されています。これは、エラーが発生した場合に Remove-Item コマンドを無視し、その行でスクリプトの実行を続行します。

    あるいは、以下のスニペットの例のようなエイリアスを使用して、このコマンド ラインを短くすることもできます。

    rm yourfile.zip -ea ig
    

Move-Item コマンドでファイルをコピーする

Copy-Item の代わりに Move-Item コマンドを使用することもできます。 Move-Item コマンドは、ファイルが移動先フォルダーに存在するかどうかを自動的にチェックします。

値が true の場合、コマンドはファイルをスキップします。 これは、Remove-Item コマンド ラインを削除して、以下のコード スニペットのような短いスクリプトを作成できることを意味します。

$sourceFolder = "C:\Temp"
$destFolder = "C:\PS"

Get-ChildItem $sourceFolder\Scripts -Recurse | %{
    Move-Item -Path $_.FullName -Destination $destFolder
}
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

関連記事 - PowerShell File