slider-override
Goto Top

Benötige Hilfe mit "move-item" in verbindung mit "-force"

Ich bin seit tagen ab verzweifeln,

Ich benötige einen simplen befehl um Ordern (welche datein beinhalten zu verschieben)

Da es auf einem WEBDAV Laufwerk passiert kommt keiner kein xcopy oder robocopy in frage, da hier im hintergrund immer kopiert und dann gelöscht wird.

bei einem "move-item" oder normal "move" hingegen wird die datei direkt verschoben.

Hier mein Aktueller Code:
ls "O:\Incomming\"| where{  $_.creationtime -lt (get-date).AddMinutes(-2)}|foreach{move-item $_.fullname "O:\_New\" -force}   

Kurze beschreibung:
listet alle dateien/Ordner in Ordner Incomming auf, wenn Sie älter sind als 2 min, verschiebt er diese in _New.

Das funktioniert soweit auch, bis auf den "-force" befehl. (wenn eine datei oder ein Ordner schon existiert und er soll überschrieben werden
bekomme immer "move-item : Eine Datei kann nicht erstellt werden, wenn sie bereits vorhanden ist."

Ich habe auch schon versucht den "-force wo anders zu platzieren, aber ohne erfolg face-sad

Hat jemand eine idee ?

Content-Key: 256285

Url: https://administrator.de/contentid/256285

Printed on: April 18, 2024 at 08:04 o'clock

Member: Dani
Dani Nov 29, 2014 updated at 14:13:37 (UTC)
Goto Top
Moin,
du wirst den Umweg über Copy-Item und Remove-Item gehen müssen. Move-Item lässt kein Überschreiben von bestehenden Verzeichnissen zu. Hingegen bei Dateien bist du mit dem Parameter -Force auf dem richtigen Weg.


Gruß,
Dani
Member: Slider-Override
Slider-Override Nov 29, 2014 at 13:38:45 (UTC)
Goto Top
Hmmm aber mit copy-item wird eine kopie angelegt, das kann ich nicht nutzen den dann würde er via Webdav die Datei neu hochladen face-sad mist
Member: colinardo
Solution colinardo Nov 29, 2014, updated at Dec 08, 2014 at 06:22:39 (UTC)
Goto Top
Moin,
ohne die Benutzung von copy-item und nur mit move, etwa so:
$source = 'O:\Incomming'  
$target = 'O:\_New'  
dir $source -recurse | ?{!$_.PSIsContainer -and $_.creationtime -lt (get-date).AddMinutes(-2)} | %{
  $newdir =  $_.Directoryname.Replace($source,$target)
  if(!(Test-Path $newdir)){md $newdir -Force}
  move-item $_.fullname $newdir -force
} 
Grüße Uwe
Member: Slider-Override
Slider-Override Dec 08, 2014 at 06:26:24 (UTC)
Goto Top
Hier meine Lösung (harte arbeit in PS):


$SourceFolder = "O:\_FTP_IN"
$DesFolder = "O:\_New"

  1. 1 erstellt Ordner (geht)
Get-ChildItem -Directory -Path $SourceFolder -Recurse | % {New-Item -Path (Join-Path -Path $DesFolder -ChildPath ($_.FullName.Substring($SourceFolder.Length))) -Force -ItemType Directory}

  1. 2 Verschiebt dateien aus unterordner an Ziel-Unterordner (überschreibt auch wenn vorhaden)
cd $SourceFolder

Move-Item -Path (Join-Path -Path $SourceFolder -ChildPath ("\*.*")) -Destination ((Join-Path -Path $DesFolder -ChildPath ("\")) + "\") -Force


Get-ChildItem -Directory -Path $SourceFolder -Recurse | % {
echo ("Moving files to folder: " + $_.FullName)
Move-Item -Path ($_.FullName + "\*.*") -Destination ((Join-Path -Path $DesFolder -ChildPath ($_.FullName.Substring($SourceFolder.Length))) + "\") -Force
}

  1. Löscht Ordner die seit 60 min nicht verändert wurde.
ls $SourceFolder -recurse | where { $_.creationtime -lt (get-date).AddMinutes(-60)} | del -recurse