Anhand einer Excelliste nach Dateien auf Server suchen und verschieben
Hallo,
ich habe ein etwas verzwicktes Problem. Und zwar suche ich nach einer Möglichkeit, Dateien anhand einer Excelliste auf einer Festplatte zu suchen und in einen Ordner zu kopieren. Ich weiß nicht, ob so etwas überhaupt möglich ist, daher erst mal grundsätzlich die Frage.
Konkret geht es darum, dass ich in einer Excelliste ca. 5.000 Artikelnummern habe (z.B. "123456"). Auf unserem Server wiederrum liegen Bilder mit diesen Artikelnummern als Dateiname (allerdings verstreut in hunderten Ordnern und leider hängt an der Artikelnummer auch manchmal noch ein Zusatz (z.B. "123456-blabla.psd").
Ich suche nun nach einer einfachen Möglichkeit, die Festplatte anhand der Excelliste zu durchsuchen und wenn ein entsprechendes Bild gefunden wird, soll es in einen Ordner kopiert werden, sodass ich alle Bilder zusammen habe. Außerdem müsste dann natürlich noch in der Excelliste ein "OK" hinter die entsprechende Artikelnr. geschrieben werden, wenn ein Bild gefunden wurde.
Erschwerend kommt hinzu, dass es sowohl "123456.psd" als auch "123456.tiff" oder "123456.jpg" geben kann, wobei ich genau in dieser Reihenfolge die Priorität hätte. Heißt also, wenn ein psd gefunden wird, soll er dieses kopieren, wenn nicht dann das tiff und wenn das auch nicht, dann das jpg.
Ist sowas überhaupt machbar?
Vielen Dank bereits im Voraus und ein schönes Wochenende!
(sorry falls die Frage im falschen Unterforum ist, bitte ggf. verschieben)
ich habe ein etwas verzwicktes Problem. Und zwar suche ich nach einer Möglichkeit, Dateien anhand einer Excelliste auf einer Festplatte zu suchen und in einen Ordner zu kopieren. Ich weiß nicht, ob so etwas überhaupt möglich ist, daher erst mal grundsätzlich die Frage.
Konkret geht es darum, dass ich in einer Excelliste ca. 5.000 Artikelnummern habe (z.B. "123456"). Auf unserem Server wiederrum liegen Bilder mit diesen Artikelnummern als Dateiname (allerdings verstreut in hunderten Ordnern und leider hängt an der Artikelnummer auch manchmal noch ein Zusatz (z.B. "123456-blabla.psd").
Ich suche nun nach einer einfachen Möglichkeit, die Festplatte anhand der Excelliste zu durchsuchen und wenn ein entsprechendes Bild gefunden wird, soll es in einen Ordner kopiert werden, sodass ich alle Bilder zusammen habe. Außerdem müsste dann natürlich noch in der Excelliste ein "OK" hinter die entsprechende Artikelnr. geschrieben werden, wenn ein Bild gefunden wurde.
Erschwerend kommt hinzu, dass es sowohl "123456.psd" als auch "123456.tiff" oder "123456.jpg" geben kann, wobei ich genau in dieser Reihenfolge die Priorität hätte. Heißt also, wenn ein psd gefunden wird, soll er dieses kopieren, wenn nicht dann das tiff und wenn das auch nicht, dann das jpg.
Ist sowas überhaupt machbar?
Vielen Dank bereits im Voraus und ein schönes Wochenende!
(sorry falls die Frage im falschen Unterforum ist, bitte ggf. verschieben)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 301285
Url: https://administrator.de/contentid/301285
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
12 Kommentare
Neuester Kommentar
Ist sowas überhaupt machbar?
Ja das ist es.Gruß jodel
Naja wenn du oben schreibst
Wenn du Code sehen willst dann schreib das doch gleich
Wen ich dir hier jetzt bspw. was in C++ poste ist das bestimmt nicht nach deinem "Gusto".
Ich weiß nicht, ob so etwas überhaupt möglich ist, daher erst mal grundsätzlich die Frage.
habe ich diese von dir "grundsätzliche" Frage eindeutig beantwortet!Wenn du Code sehen willst dann schreib das doch gleich
Daher danke an alle, die konstruktiv helfen können.
Ich kann konstruktiv helfen wie du an meiner Vielzahl an Codebeispielen hier im Forum sehen kannst, aber hier weiß ja man ja noch nicht mal in welcher Programmier- bzw. Scriptsprache du arbeiten willst oder überhaupt Erfahrung hast wenn du das in der allgemeinen Kategorie Entwicklung postest.Wen ich dir hier jetzt bspw. was in C++ poste ist das bestimmt nicht nach deinem "Gusto".
Les doch mal bitte meinen letzten Kommentar zu Ende.
Ich kann helfen wenn ich weiß womit du programmieren/arbeiten willst.
Wenn ich hier jetzt was fertiges in Powershell poste und dann kommst, nö ich will das in Batch ... dann wäre das für die Tonne gewesen.
Zudem wäre interessant ob deine Excel-Liste eventuell eine CSV-Datei ist.
Gruß jodel32
Ich kann helfen wenn ich weiß womit du programmieren/arbeiten willst.
Wenn ich hier jetzt was fertiges in Powershell poste und dann kommst, nö ich will das in Batch ... dann wäre das für die Tonne gewesen.
Zudem wäre interessant ob deine Excel-Liste eventuell eine CSV-Datei ist.
Gruß jodel32
Hier mal ein Beispiel mit Powershell:
Wenn du eine CSV-Datei in folgendem Format anlegst:
Kannst du mit diesem Powershell-Code deine Such und Kopieraktion durchführen:
Die CSV-Datei wird dann um eine Status-Spalte ergänzt so dass das CSV-File am Ende so aussieht
Gruß jodel32
Wenn du eine CSV-Datei in folgendem Format anlegst:
Artikelnummer
11111
22222
33333
44444
55555
# ------
# Zielordner für die Bilder
$targetfolder = 'C:\Ziel'
# Suchordner
$searchfolder = 'D:\'
# Pfad zur CSV-Liste
$listpath = 'C:\liste.csv'
# ------
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required to run this script!" -ForeGroundColor Yellow; return}
# Zielordner erstellen wenn er nicht existiert
if (!(Test-Path $targetfolder)){md $targetfolder -Force | out-null}
# CSV-Datei importieren
$liste = Import-CSV $listpath -Delimiter ";"
# Spalte für den Suchstatus hinzufügen
$liste | Add-Member -MemberType NoteProperty -Name 'Status' -Value ''
write-host "Einlesen der Dateien ..." -ForegroundColor Green
# Alle Bilder in eine Variable einlesen
$files = gci $searchfolder -Recurse -Force -File -EA Ignore | ?{$_.Extension -in @('.psd','.tiff','.jpg','.jpeg')}
# Für jede Artikelnummer in der CSV-Datei
$liste | %{
# Artikelnummer steht in der Spalte 'Artikelnummer'
$artnr = $_.Artikelnummer
# Status ausgeben
write-host "Suche Bilder zur Artikelnummer $artnr ..." -ForegroundColor Green -NoNewline
# passende Dateien finden
$foundfiles = $files | ?{$_.Name -like "$artnr*"}
# wenn Dateien gefunden wurden ...
if($foundfiles){
write-host "$($foundfiles.Count) Bilder gefunden"
# setze Status auf OK
$_.Status = "OK"
$subtarget = "$targetfolder\$artnr"
# erstelle einen Unterordner für die Artikelnummer im Zielordner
md $subtarget -Force -EA SilentlyContinue | out-null
# Kopiere die Dateien in den Zielordner
$foundfiles | copy-item -Destination $subtarget
}else{
write-host "Keine Bilder gefunden"
$_.Status = "Keine Bilder"
}
}
# Schreibe den Listenstatus zurück in das CSV-File
$liste | export-csv $listpath -Delimiter ";" -NoType -Encoding utf8
"Artikelnummer";"Status"
"11111";"OK"
"22222";"OK"
"33333";"Keine Bilder"
"44444";"OK"
"55555";"OK"
"66666";"Keine Bilder"
Gruß jodel32
Zitat von @xsto123:
also ich habe das heute morgen direkt ausprobiert, leider funktioniert das Script nicht.
Doch also ich habe das heute morgen direkt ausprobiert, leider funktioniert das Script nicht.
Ich kenne mich mit Powershell nicht aus, daher gehe ich davon aus, dass der Fehler bei mir liegt.
Jupp.Als erstes habe ich die Pfade angepasst und die CSV-Datei erstellt (Testdateien). Danach habe ich das Script als .ps1 Datei abgespeichert und die ExecutionPolicy auf "Unrestricted" gesetzt. Wenn ich das Script jetzt allerdings per PowerShell ISE ausführen will, erscheint einfach nur "Fehler" links unten.
Und welche Fehlermeldung genau ????Habe ich etwas falsch gemacht?
Meine Glaskugel sagt: Wahrscheinlich einfach eine zu alte Powershellversion benutzt! Mindestens PS3.0 solltest du haben.Ein $psversiontable in der Konsole sagts dir ...
Dafür habe ich ja extra Zeile 10 eingebaut die das überprüft und es dir ausgibt wenn es so ist.
Hallo,
ich habe ein ähnliches Problem und bin auf diese Lösung gestoßen.
An sich funktioniert es, jedoch sind meine Dateien mit einem Präfix ausgestatten: good_123456789.bmp oder bad_123456789.bmp
Ich habe aber in der csv datei nur 123456789.
@114757: kannst du mir sagen, wie ich deinen Skript ändern muss, damit ich die richtigen Bilder finde?
Danke schon mal
ich habe ein ähnliches Problem und bin auf diese Lösung gestoßen.
An sich funktioniert es, jedoch sind meine Dateien mit einem Präfix ausgestatten: good_123456789.bmp oder bad_123456789.bmp
Ich habe aber in der csv datei nur 123456789.
@114757: kannst du mir sagen, wie ich deinen Skript ändern muss, damit ich die richtigen Bilder finde?
Danke schon mal