Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

mittels batch dateien kopieren, welche in csv-Datei benannt sind

Frage Entwicklung Batch & Shell

Mitglied: EnzephaloN

EnzephaloN (Level 1) - Jetzt verbinden

09.04.2008, aktualisiert 30.07.2008, 8183 Aufrufe, 19 Kommentare

Hallo

Folgende Problematik:
- in einem Verzeichnis mit diversen Unterverzeichnissen liegen Bilder (zB: AAA_0001.jpg)
- es wird eine CSV-Datei geben in welcher das entsprechende Unterverzeichnis sowie der Dateiname hinterlegt ist (zB: DB_120_10292)
- nun soll eine Batchdatei die CSV-Datei zeilenweise auslesen und die entsprechende Bilddatei in einen anderen Ordner kopieren
- es gibt keine Dupletten bzw gleichnamige Dateien/Verzeichnisse

Zwar habe ich früher mal in Java und anderen Programmiersprachen programmiert, nur ist das lange her.

Würde mich über ein wenig Schützenhilfe freuen!

Danke
EnzephaloN
Mitglied: bastla
09.04.2008 um 20:12 Uhr
Hallo EnzephaloN und willkommen im Forum!

Einige Fragen vorweg:

- Wie ist die Beispielzeile aus der CSV-Datei zu interpretieren - soll das Verzeichnis (Quelle, oder doch Ziel?) "DB_120" und die Datei "10292" heißen, und wie lässt sich der Zusammenhang zu "AAA_0001.jpg" herstellen?

- Gibt es mehrere Unterverzeichnisebenen, oder nur mehrere Unterverzeichnisse des Quellverzeichnisses?
- Liegen auch im Quellverzeichnis Bilddateien?

- Gilt das Ziel "anderer Ordner" für alle Bilder?

Grüße
bastla
Bitte warten ..
Mitglied: EnzephaloN
09.04.2008 um 20:25 Uhr
Hallo EnzephaloN und willkommen im Forum!

Hallo!

Einige Fragen vorweg:

- Wie ist die Beispielzeile aus der
CSV-Datei zu interpretieren - soll das
Verzeichnis (Quelle, oder doch Ziel?)
"DB_120" und die Datei
"10292" heißen, und wie
lässt sich der Zusammenhang zu
"AAA_0001.jpg" herstellen?

Hier mal zwei Beispielzeilen:
DB_120;AAA_0001.jpg;
DR_110;BAB_0002.jpg;

wobei DB_120 bzw DR_110 das Unterverzeichnis angeben und das andere die Dateinamen sind.


- Gibt es mehrere Unterverzeichnisebenen,
oder nur mehrere Unterverzeichnisse des
Quellverzeichnisses?

Letzteres. Also zum Quellverzeichnis nur ein weiteres Unterverzeichnis

- Liegen auch im Quellverzeichnis
Bilddateien?

Nein, das Quellverzeichnis ist leer.

- Gilt das Ziel "anderer Ordner"
für alle Bilder?

Ja.

Grüße
bastla

Vielen Dank
EnzephaloN
Bitte warten ..
Mitglied: tacker
09.04.2008 um 22:34 Uhr
Guten Abend!

Entschuldigt mich, falls ich mit meinem Lösungsvorschlag völlig daneben liegen sollte - poste ihn denoch einmal!

01.
@Echo Off 
02.
For /F "tokens=1,2 delims=;" %%i in (pics.csv) DO CALL :BEARBEITEN %%i %%j 
03.
 
04.
:BEARBEITEN 
05.
SET FOLDER=%1 
06.
SET PIC=%2 
07.
copy %FOLDER%\%PIC% zielordnername 
08.
SET FOLDER= 
09.
SET PIC=
so müsste das eigentlich hinhauen, wenn das .cmd file in dem Ordner ausgeführt wird, wo die Unterverzeichnisse darunterliegen! Einfach noch den Zielordnername angeben!

Grüsse tacker
Bitte warten ..
Mitglied: Biber
09.04.2008 um 22:45 Uhr
Hmm,

wenn es die Unterverzeichnisse schon gibt, dann reicht doch folgendes vom CMD-Prompt, oder?
01.
For /F "tokens=1,2 delims=;" %i in (pics.csv) DO Move "%~j" "%~i\%~j"
Oder übersehe ich etwas?

Grüße
Biber
Bitte warten ..
Mitglied: bastla
09.04.2008 um 23:14 Uhr
@Biber
Oder übersehe ich etwas?
So ganz klar ist die Frage Quell- oder Zielverzeichnis noch nicht beantwortet, aber ich würde es eher so wie tacker sehen - also die Umkehrung Deines Entwurfs (ebenfalls für die Direkteingabe an der Kommandozeile):
01.
For /F "tokens=1,2 delims=;" %i in (pics.csv) DO copy "%~i\%~j" "D:\Zielverzeichnis\">nul
wobei ich das Zielverzeichnis auch erst erfinden musste.

Wieso in der CSV-Datei nicht gleich ein vollständiger bzw relativer Pfad steht, kann wohl nur EnzephaloN erklären.

Ansonsten noch ein Hinweis: eigentlich sollte kopiert werden ...
@tacker
Also ich sehe überhaupt keinen Grund für eine Entschuldigung ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
09.04.2008 um 23:24 Uhr
@bastla

Ansonsten noch ein Hinweis: eigentlich sollte kopiert werden ...
Okay, ich habe es jetzt auch nochmal gelesen.
Das "move" hatte ich schon bewusst gewählt, weil ich vom umgekehrten Fall (Wegsortieren AUS einem Sammelsurium-Verzeichnis in irgendwas Strukturiertes) ausging.

Wenn der Sachverhalt aber ist, die jugendfreien Bilder aus den Ordnern 'Urlaub2003' bis 'Urlaub2007' in den Ordner 'FürMutti' zu kopieren, dann ist ein COPY verständlich.

Grüße
Biber
P.S. @tacker
Ich sehe auch überhaupt keinen Grund zum Entschuldigen.
...außerdem... wir geben kein Pardon hier...
Bitte warten ..
Mitglied: EnzephaloN
10.04.2008 um 14:35 Uhr
Hallo & Danke für Eure Zuschriften.

Ja, es geht ums Kopieren in einen Ordner. Die Problematik ist, daß aus einer Warenwirtschaft eine Artikelliste als XLS exportiert wird und diese bestimmten Artikel sollen dann in ein anderes Verzeichnis kopiert werden. Damit man halt nicht 400 Bilder einzeln suchen muß sondern das einfach automatisiert.
In der XLS-Datei steht die Artikelnummer, aus welcher man das Unterverzeichnis generieren kann und der Artikelname, was der Dateiname ist.

Kann ich jetzt den oben angegebenen und hier nochmal wiederholten Code als funktionabel ansehen?
01.
@Echo Off 
02.
For /F "tokens=1,2 delims=;" %%i in (pics.csv) DO CALL :BEARBEITEN %%i %%j 
03.
 
04.
:BEARBEITEN 
05.
SET FOLDER=%1 
06.
SET PIC=%2 
07.
copy %FOLDER%\%PIC% zielordnername 
08.
SET FOLDER= 
09.
SET PIC=
EnzephaloN
Bitte warten ..
Mitglied: bastla
10.04.2008 um 14:58 Uhr
Hallo EnzephaloN!

Eine etwas verallgemeinerte bzw gestraffte Version würde so aussehen (die "set"-Zeilen sind natürlich entsprechend anzupassen):
01.
@echo off & setlocal 
02.
set "Liste=D:\Deine CSV-Datei.csv" 
03.
set "Basis=D:\Ordner mit Bild-Unterordnern" 
04.
set "Ziel=D:\Dein Zielordner" 
05.
 
06.
if not exist "%Ziel%" md "%Ziel%" 
07.
for /f "usebackq tokens=1,2 delims=;" %%i in ("%Liste%") do copy "%Basis%\%%~i\%%~j" "%Ziel%\">nul
Das Testen kann Dir aber keiner abnehmen - bei einem Kopiervorgang in nur ein Zielverzeichnis (und mit einer exemplarischen Liste von zB nur 5 Bildern) ist das aber weder gefährlich noch aufwändig ...

Grüße
bastla
Bitte warten ..
Mitglied: EnzephaloN
10.04.2008 um 15:04 Uhr
Danke!
Wir werdens später ausprobieren!
Bitte warten ..
Mitglied: flokam
29.07.2008 um 11:53 Uhr
hallo Leute,

ich habe ein ähnliches Problem. ich hab versucht mit diesen Code, aber leider ohne Erfolg.

01.
@echo off & setlocal  
02.
 
03.
 
04.
set "Liste=D:\test\bild\Extraktion_BILD_DATEI.csv"  
05.
set "Basis=D:\test\bild\layout"  
06.
set "Ziel=D:\test\kopiert"  
07.
 
08.
if not exist "%Ziel%" md "%Ziel%"  
09.
 
10.
for /f "usebackq tokens=1 delims=" %%i in ("%Liste%") do copy "%Basis%\%%~i\%%~j" "%Ziel%\">nul 
11.
 
kann bitte jemand weiterhelfen?

danke. Mit freundlichen Grüßen. flokam
Bitte warten ..
Mitglied: bastla
29.07.2008 um 12:33 Uhr
Hallo flokam!

kann bitte jemand weiterhelfen?
Am ehesten dann, wenn Dein Problem nicht nur "ähnlich", sondern ausreichend beschrieben ist (was insbes den Inhalt Deiner Datei "D:\test\bild\Extraktion_BILD_DATEI.csv" betrifft) ...

Vorweg ist jedenfalls schon festzustellen, dass mit dem Auslesen nur eines "tokens" kein "%%~j" zur Verfügung stehen kann.

Wo es klemmt kannst Du übrigens selbst versuchen festzustellen, indem Du im Batch in Zeile 1 "echo off" auf "echo on" änderst und dann an der Kommandozeile so startest:
01.
"D:\Dein Pfad\Dein Batch.bat" > D:\BatchLog.txt 2>>&1
In der erstellten Datei "D:\BatchLog.txt" ist dann jeder Schritt des Ablaufes dokumentiert.

Grüße
bastla
Bitte warten ..
Mitglied: flokam
29.07.2008 um 14:49 Uhr
Hallo bastla,

danke für deine schnelle Antwort.
Also, die CSV_Datei sieht dann so aus:
01.
00000\00000933.jpg  
02.
00000\00000934.jpg  
03.
00000\00000935.jpg  
04.
00000\00000936.jpg  
05.
00000\00000937.jpg
die 00000 ist ein Unterverzeichnis. Wenn nötig, kann ich drauf verzichten.
Jetzt mochte ich über diese liste loopen und Dateien die auf z.B. D:\test\layout\00000 liegen
in eine neue Verzeichnis kopieren z.B. D:\test\kopiert

nur zu Info... ich habe nicht viel Ahnung von Batch Programmierung.

danke in Voraus
flokam
Bitte warten ..
Mitglied: bastla
29.07.2008 um 15:11 Uhr
Hallo flokam!

Dann so:
01.
@echo off & setlocal  
02.
 
03.
set "Liste=D:\test\Extraktion_BILD_DATEI.csv"  
04.
set "Basis=D:\test\layout"  
05.
set "Ziel=D:\test\kopiert"  
06.
 
07.
if not exist "%Ziel%" md "%Ziel%"  
08.
 
09.
for /f "usebackq delims=" %%i in ("%Liste%") do copy "%Basis%\%%~i" "%Ziel%\">nul
Bereits im Zielordner existierende gleichnamige Dateien werden übrigens kommentarlos überschrieben.

Grüße
bastla
Bitte warten ..
Mitglied: flokam
30.07.2008 um 12:04 Uhr
Hallo bastla,

Danke für Deine Hilfe. Es funktioniert super.
Ich hätte noch eine Frage.
Wenn jetzt meine Liste so aussehen würde:
01.
00000\00000933.jpg  
02.
00001\00000934.jpg  
03.
00003\00000935.jpg  
04.
00006\00000936.jpg  
05.
00010\00000937.jpg
und die Bildern in die vorgegebenen Verzeichnis kopiert werden muss, geht dass?
z.B. 00000\00000933.jpg in das Verzeichnis 00000 unter Basis.
Man geht davon aus dass die Verzeichnisse nicht existieren.
wie müsste mein Code dann aussehen?

Grüße, flokam
Bitte warten ..
Mitglied: bastla
30.07.2008 um 12:24 Uhr
Hallo flokam!

Sollte so gehen (wobei ich annehme, dass Du meinst "in das Verzeichnis 00000 unter Ziel"):
01.
@echo off & setlocal  
02.
 
03.
set "Liste=D:\test\Extraktion_BILD_DATEI.csv" 
04.
set "Basis=D:\test\layout" 
05.
set "Ziel=D:\test\kopiert"  
06.
 
07.
if not exist "%Ziel%" md "%Ziel%"  
08.
 
09.
for /f "usebackq delims=" %%i in ("%Liste%") do xcopy /i "%Basis%\%%~i" "%Ziel%\%%~i*">nul
Grüße
bastla
Bitte warten ..
Mitglied: flokam
30.07.2008 um 12:49 Uhr
Hallo bastla,

VIELEN DANK. Du hast mir sehr geholfen Danke.
Du hast recht, es ging ums Ziel.

wie ich sehe da kommt der xcopy in Spiel und noch das i variable an ziel weiter gegeben oder?
wie gesagt, ich hab wenig Ahnung von Batchdateien. wenn Du noch Lust hast und ist nicht zu viel verlangt, ... kannst Du mir kurz/Grob erklären wie dieses Code funktioniert?

Vielen Dank nochmal

Ciao, flokam
Bitte warten ..
Mitglied: bastla
30.07.2008 um 13:01 Uhr
Hallo flokam!

"xcopy" wird verwendet, damit bei Bedarf das Zielverzeichnis automatisch erstellt wird - "copy" kann das nicht.

Mit dem Schalter "/i" lässt sich verhindern, dass bei nicht-existentem Zielordner die Frage
Ist das Ziel ... ein Dateiname
oder ein Verzeichnisname
(D = Datei, V = Verzeichnis)?
gestellt wird - damit das auch klappt, wenn das Ziel ein Dateiname sein soll, wird an das Ende der Zielangabe noch ein "*" gesetzt.

In "%%~i" steht die aus der csv-Datei eingelesene Zeile ohne umgebende Anführungszeichen - diese setze ich (zur Sicherheit) dann selbst, allerdings um den gesamten Quell- bzw Zielpfad herum.

Grüße
bastla
Bitte warten ..
Mitglied: flokam
30.07.2008 um 13:13 Uhr
Hallo bastla,

ich bedanke mich. (DANKE)
selten bekommt man so eine ausführliche Erklärung. (HILFE 100% erreicht)

Grüße, flokam
Bitte warten ..
Mitglied: Biber
30.07.2008 um 15:43 Uhr
Moin flokam,

eigentlich liegt der von bastla hier eingeführte Standard bei 100,9%.

Aber diese doofe CMD.exe, mit der wir hier die M$-Bätche zusammenschroten, die schneidet immer die Nachkommastellen ab.

Ich schliesse den Beitrag mal.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
DSL, VDSL

Telekom blockiert immer noch den Port 7547 in ihrem Netz

(3)

Erfahrungsbericht von joachim57 zum Thema DSL, VDSL ...

Ähnliche Inhalte
Batch & Shell
gelöst XML-Datei: Pfade suchen, verlinkte Dateien kopieren und Pfade ändern (4)

Frage von ELEVATOR zum Thema Batch & Shell ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...