PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Win 10 - HDD nach Inhalten aus Excel durchsuchen


mercutio
2019-12-19, 09:04:31
Guten Morgen,
ich habe eine Excel-Liste mit Artikel-Nummern in einer Spalte.
Kann ich die Festplatte nach diesen Artikel-Nummern durchsuchen lassen und das Gefundene in einen bestimmten Ordner kopieren?

Ich denke, das könnte mit einer Batch-Datei funktionieren - ich habe allerdings wenig Ahnung davon.

Kann mir da jemand helfen? :smile:

Screemer
2019-12-19, 09:08:00
Powershell: https://stackoverflow.com/questions/34287924/powershell-find-file-by-file-name-and-rename-based-on-csv

mercutio
2019-12-19, 10:16:49
Also ich habe die executionpolicy auf unrestricted geändert.

Ich verwende diesen Code - geht aber nicht:
$file = Import-CSV -Path C:\Users\...\Desktop\RJA\source3.csv

foreach($list in $file.art){
$Name=$($list.name)
Get-ChildItem -Path E:\ -Filter *.jpg | where {$_.FullName -like "*$Name*" } |

Copy-Item -Destination C:\Users\...\Desktop\RJA\fegime\img
}

Wenn ich die Variable $file.art ausgebe, dann werden alle Zeilen der Datei hintereinander ausgegeben. Es soll aber Zeile für Zeile abgefragt werden. Der Name der Spalte ist "art"

Auch dieser Code geht nicht:
$ImportedCSV = Import-Csv -Path C:\Users\...\Desktop\RJA\source3.csv
gci E: -Filter '*.jpg' | Where-Object { $_.Name -like "*$($ImportedCSV.Name)*" } | Copy-Item -Destination C:\Users\...\Desktop\RJA\fegime\img

Jetzt bin ich bei diesem Code, damit die CSV Zeile für Zeile ausgelesen wird:
$csv = Import-Csv -Path C:\Users\...\Desktop\RJA\source3.csv
$csv | %{
gci E: -Filter '*.jpg' | Where-Object { $_.art -like "*$($csv.art)*" } | Copy-Item -Destination C:\Users\...\Desktop\RJA\fegime\img
}
Mit write-host habe ich das überprüft.
Aber es wird leider nix kopiert... :frown:
muss an gci -recurse dran, damit Unterordner durchsucht werden?

Darkman.X
2019-12-19, 12:41:42
Ich bin verwirrt: Du beginnst den Thread mit "Excel", ich gehe also von Dateien mit der Endung .xls oder .xlsx aus.

Im Powershell-Code geht es aber plötzlich um .CSV-Dateien. CSV-Dateien können zwar auch in Excel genutzt werden, aber das sind keine Excel-Dateien. Und innerhalb des Powershell-Codes filterst du nach JPEG-Dateien (wenn ich es richtig sehe, kenne mich nicht so mit PS aus, eher mit dem altmodischen CMD).

Ich komme irgendwie nicht mit...

mercutio
2019-12-19, 13:03:47
Die Excel-Liste ist die Quelle meiner Daten.
Da stehen in einer Spalte namens "art" Nummern drin, eine Nummer pro Zeile.
Jetzt möchte ich Zeile für Zeile abfragen und nach .jpg-Dateien suchen, die im Dateinamen diese Nummer enthalten, "12345*.jpg" wäre also die Suchaufgabe.
Wenn eine Datei gefunden wurde, soll sie in ein anderes Verzeichnis kopiert werden.

Ich denke aber, in dieser "Zeile für Zeile"-Anforderung liegt das Problem. Wenn ich mir die Variable $csv.art ausgeben lasse, stehen da immer alle Nummern hintereinander in einer Reihe. Wenn das Skript nach diesem Dateinamen sucht, findet es natürlich nix...

Ich habe mir alles zusammengegoogelt, aber das klappt wohl so nicht. Google weiß nicht alles. Ich dachte aber, hier weiß es jemand...

Screemer
2019-12-19, 13:38:54
für mich funktioniert folgender code

$file = Get-Content PATH\test.csv
ForEach($list in $file){
$Name=$($list.name)
Get-ChildItem -Path DRIVELETTER -recurse -Filter *.jpg | where {$_.FullName -like "*$Name*" } | Copy-Item -Destination COPYPATH
}
er hört zwar mit der schleife nicht auf, kann man aber mit strg+c abbrechen und alle test-bilder befinden sich im zielordner.

mercutio
2019-12-19, 13:50:18
Ich habe dies, und es klappt, es klappt :eek:

$csv = Import-Csv -Path C:\Users\...\Desktop\RJA\source3.csv
$csv | %{
$file = $_.art+"*.jpg"
write-host $file

gci "E:\...\*" -recurse $file | Copy-Item -Destination C:\Users\...\Desktop\RJA\img
}


Da habe ich jetzt stundenlang dran rumgefrickelt.

Das "write-host" hätte ich weglassen können. Ich wollte aber sehen, ob die Variable korrekt erzeugt wird und man sieht, ob das Skript überhaupt etwas tut.
"art" ist der Name der Spalte in der CSV-Datei.

Danke für alle die sich die Mühe gemacht haben und hier reingeschaut haben. :smile:

Screemer
2019-12-19, 13:58:10
art heißt die spalte in deinem csv und an den inhalt im array hängst du für $file noch ein .jpg an, oder?

mercutio
2019-12-19, 14:33:10
art heißt die spalte in deinem csv und an den inhalt im array hängst du für $file noch ein .jpg an, oder?
Ganz genau! :smile:

Eigentlich ein einfacher Code, hat nur lange gedauert, bis ich das zusammen hatte. :rolleyes:
Das Ergebnis habe ich mir immer mit "write-host" anzeigen lassen. Da stand zu Anfang immer der komplette Inhalt der CSV drin, deswegen hat das auch nicht geklappt bei mir.