PowerShell にファイルが存在する場合は削除項目
管理者として考えられる業務の 1つは、おそらくファイルの管理でしょう。 この状況は通常、複数のファイル サーバーを管理している場合に発生します。
サーバー内で実行できる特定のタスクの 1つは、ファイルを別の場所にコピーして、おそらく会社のファイルのコピーまたはミラーを作成することです。
ただし、一括コピーを一度に実行する必要がある場合はどうすればよいでしょうか。 一括コピー中に、宛先の場所に既存のファイルが存在する可能性もあります。
この記事では、PowerShell を使用してファイルを一括コピーし、コピー先フォルダーに存在するかどうかを確認し、削除する方法について説明します。
PowerShell のCopy-Item
の後にファイルが存在する場合はRemove-Item
この記事では、Get-ChildItem
、Remove-Item
、および Copy-Item
コマンドに焦点を当てて使用します。 ファイルを一括でコピーし、宛先フォルダーに存在するかどうかを確認できるスクリプト ブロックを共有します。存在する場合は、ファイルが削除されて上書きされます。
そのため、以下のようにソース フォルダーと宛先フォルダーを宣言し、ドリルダウンしてスクリプト ブロックについて詳しく説明します。
コード例:
$sourceFolder = "C:\Temp"
$destFolder = "C:\PS"
Get-ChildItem $sourceFolder\Scripts -Recurse | %{
Remove-Item $_ -ErrorAction Ignore
Copy-Item -Path $_.FullName -Destination $destFolder
}
-
まず、
$sourceFolder
変数と$destFolder
変数のように、各変数内でソース フォルダーと宛先フォルダーを宣言します。 -
次に、
Get-ChildItem
コマンドを使用してフォルダー内のすべてのファイルを取得し、それらを配列リストに配置します。Get-ChildItem
コマンドは、複数のフォルダーにも対応できます。複数のフォルダーを確認するには、以下のスニペットのように宛先の間にカンマ (
,
) を挿入します。Get-ChildItem $sourceFolder\Scripts, $sourceFolder\Test
-Recurse
パラメーターは、親ソース フォルダーのサブフォルダー内にもあるファイルをチェックするために使用されます。 -
次に、
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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn