Remove-Item, wenn Datei in PowerShell vorhanden ist

Remove-Item, wenn Datei in PowerShell vorhanden ist

Als Administrator wäre eine unserer möglichen Aufgaben wahrscheinlich die Verwaltung von Dateien. Diese Situation tritt normalerweise auf, wenn wir mehrere Dateiserver verwalten.

Eine spezielle Aufgabe, die wir innerhalb des Servers erledigen können, ist das Kopieren von Dateien an einen anderen Ort, um vielleicht eine Kopie oder Spiegelung der Datei eines Unternehmens zu erstellen.

Was aber, wenn wir Massenkopien gleichzeitig durchführen müssen? Es besteht die Möglichkeit, dass wir beim Massenkopieren auch auf vorhandene Dateien am Zielort stoßen.

In diesem Artikel wird erläutert, wie Sie Dateien in großen Mengen kopieren, prüfen, ob sie im Zielordner vorhanden sind, und sie mit PowerShell entfernen.

Remove-Item, wenn die Datei nach Copy-Item in PowerShell existiert

Für diesen Artikel konzentrieren wir uns auf und verwenden die Befehle Get-ChildItem, Remove-Item und Copy-Item. Wir teilen den Skriptblock, in dem wir Dateien in großen Mengen kopieren und prüfen können, ob sie im Zielordner vorhanden sind, und wenn sie vorhanden sind, wird die Datei entfernt und überschrieben.

Deklarieren Sie also Ihre Quell- und Zielordner wie unten, und lassen Sie uns einen Drilldown durchführen und den Skriptblock im Detail besprechen.

Beispielcode:

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

Get-ChildItem $sourceFolder\Scripts -Recurse | %{
    Remove-Item $_ -ErrorAction Ignore
  	Copy-Item -Path $_.FullName -Destination $destFolder
}
  1. Deklarieren Sie zuerst Ihre Quell- und Zielordner in jeder Variablen wie unsere Variablen $sourceFolder und $destFolder.

  2. Als nächstes verwenden wir den Befehl Get-ChildItem, um alle Dateien im Ordner abzurufen und sie in einer Array-Liste zu platzieren. Der Befehl Get-ChildItem kann auch mehrere Ordner bedienen.

    Um nach mehreren Ordnern zu suchen, fügen Sie ein Komma (``) zwischen den Zielen ein, wie im folgenden Snippet.

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

    Der Parameter -Recurse wird verwendet, um nach Dateien zu suchen, die sich auch im Unterordner des übergeordneten Quellordners befinden.

  3. Anschliessend verwenden wir den Remove-Item-Befehl, um die bereits vorhandene Datei zu entfernen. Wie Sie sehen können, haben wir einen Parameter namens -ErrorAction verwendet, der unsere Aktionspräferenz festlegt, wenn ein Fehler aufgetreten ist.

    In diesem Fall existiert die Datei im Fehlerfall nicht in der Zieldatei. Unsere Aktionspräferenz ist auf Ignorieren eingestellt, wodurch der Befehl Remove-Item ignoriert wird, wenn ein Fehler aufgetreten ist, und die Skriptausführung in dieser Zeile fortgesetzt wird.

    Alternativ können wir diese Befehlszeile mit Aliasen wie dem folgenden Beispiel-Snippet verkürzen.

    rm yourfile.zip -ea ig
    

Kopieren Sie Dateien mit dem Befehl Move-Item

Alternativ zu Copy-Item können wir auch den Move-Item-Befehl verwenden. Der Befehl Move-Item prüft automatisch, ob die Datei im Zielordner existiert.

Der Befehl überspringt die Datei, wenn der Wert true ist. Das bedeutet, dass wir die Befehlszeile Remove-Item löschen können und ein kürzeres Skript haben, das in etwa so aussieht wie das Code-Snippet unten.

$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

Verwandter Artikel - PowerShell File