Verschieben von Dateien auf den angemessenen Speicherort basierend auf ihrer Erweiterung

StackOverflow https://stackoverflow.com/questions/5859583

  •  28-10-2019
  •  | 
  •  

Frage

Ich habe ein Reinigungsskript, das Dateien basierend auf ihrer Erweiterung an geeignete voreingestellte Standorte verschiebt.

Beispielsweise wird eine Datei mit der Erweiterung .xls in ~ xls Ordner, .sql nach ~ sql usw. verschoben. Hier ist das mein Drehbuch.

$dirtyfolder = "\\server\c$\Documents and Settings\user\Desktop\"
$org = "\\BACKUPS\users\"
dir $dirtyfolder -fil *.doc | mv -dest "$($org)ORG\doc"
dir $dirtyfolder -fil *.txt | mv -dest "$($org)ORG\txt"
dir $dirtyfolder -fil *.sql | mv -dest "$($org)ORG\sql"
dir $dirtyfolder -fil *.log | mv -dest "$($org)ORG\log"
dir $dirtyfolder -fil *.zip | mv -dest "$($org)ORG\zip"
dir $dirtyfolder -fil *.7z | mv -dest "$($org)ORG\zip"
dir $dirtyfolder -fil *.png | mv -dest "$($org)ORG\img"
dir $dirtyfolder -fil *.jpg | mv -dest "$($org)ORG\img"
dir $dirtyfolder -fil *.mp3 | mv -dest "$($org)ORG\mp3"

Ich bin mir voll bewusst, dass dies auf unelegante Weise, um mein Ziel zu erreichen. Ich würde gerne wissen, wie ich das Skript so ändern kann, dass ich kann, damit ich kann

  1. Wiederverweichung Code wiederverwenden
  2. Wenn der Zielordner nicht vorhanden ist, sollte er erstellt werden.
  3. Gruppe ähnliche Erweiterungen wie PNG und JPG
War es hilfreich?

Lösung

Geprüft. Eine (nicht rekursive) Lösung, die die Gruppierung nicht verwaltet:

ls $dirtyfolder/* | ? {!$_.PSIsContainer} | %{
  $dest = "$($org)ORG\$($_.extension)"
  if (! (Test-Path -path $dest ) ) {
    new-item $dest -type directory
  }
  mv -path $_.fullname -destination $dest 
}

Lösung mit Gruppierung:

ls $dirtyfolder/* | ? {!$_.PSIsContainer} | %{
  $dest = "$($org)ORG\$(get-destbytype $_.extension)"
  if (! (Test-Path -path $dest ) ) {
    new-item $dest -type directory
  }
  mv -path $_.fullname -destination $dest 
}

wo get-destbytype ist die folgende Funktion:

function get-destbytype($ext) {
 Switch ($ext)
 {
  {$ext -match '(jpg|png|gif)'} { "images" }
  {$ext -match '(sql|ps1)'} { "scripts" }
  default {"$ext" }
 }
}

Andere Tipps

Dies ist mein Arbeitstest

$source = "e:\source" 
$dest = "e:\dest"
$file = gci $source | ? {-not $_.psiscontainer} 
$file | group -property extension | 
        % {if(!(test-path(join-path $dest -child $_.name.replace('.','')))) { new-item -type directory $(join-path $dest -child $_.name.replace('.','')).toupper() }}
$file | % {  move-item $_.fullname -destination $(join-path $dest -child $_.extension.replace(".",""))}

Das Skript findet alle unterschiedlichen Erweiterungen im Quellordner. Wenn der Ordner für jede Erweiterung noch nicht innerhalb des Ziels vorhanden ist, wird er erstellt. Die letzte Zeile schaltet jede Datei von der Quelle aus und verschiebt sie an das rechte Unterordnerziel.

Wenn Sie Bilder mit unterschiedlichen Erweiterungen innerhalb desselben Ordners einfügen möchten, müssen Sie eine weitere Überprüfung mit einer IF oder einer Switch -Anweisung durchführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top