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
}
-
Deklarieren Sie zuerst Ihre Quell- und Zielordner in jeder Variablen wie unsere Variablen
$sourceFolder
und$destFolder
. -
Als nächstes verwenden wir den Befehl
Get-ChildItem
, um alle Dateien im Ordner abzurufen und sie in einer Array-Liste zu platzieren. Der BefehlGet-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. -
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 BefehlRemove-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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn