karla123
Goto Top

Batch zum Kopieren von PDF

Liebes Forum,
ich benötige (als Anfänger) eure Hilfe und hoffe mir kann geholfen werden.

Ich habe ein Hauptverzeichnis, ein Unterverzeichniss mit gleichem Namen, dann wiederum mehrere Unterverzeichnisse und in einem dieser Unterverzeichnisse befindet sich ein Ordner mit immer gleichem Namen. Aus diesem Ordner möchte ich alle .pdf Daten in ein separates Verzeichnis kopieren, wenn sich mindestens 2 pdf-Dateien in diesem Ordner befinden.
z.B. Jahr\Monat01\Anton\belicht
Jahr\Monat01\Ulrike\belicht
Jahr\Monat01\Platon\belicht
Jahr\Monat01\Jakobus\belicht
wie zu sehen ist der Ordner Jahr und Monat immer gleich, das folgende Verzeichnis müsste übersprungen werden(?) und alle PDF´s aus dem Ordner "belicht" sollen kopiert werden in ein Verzeichnis z.B. "Kopie"

Ist das mit einem Batch zu lösen? Könntet Ihr mir bitte helfen? Meine Kenntnisse sind leider sehr gering!

Betriebssystem: Windows 7, die Daten befinden sich auf einem Netzlaufwerk, den Batch würde ich gerne von meinem Desktop starten.


Vielen Dank im Voraus!!

LG von Karla

Content-ID: 245073

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

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

Nr60730
Nr60730 30.07.2014 um 11:38:50 Uhr
Goto Top
Moin,

such mal nach einer Anleitung vom Biber - Stichwortr batch Datum
Wenn du das gefunden hast - for Schleifen Tutorial vom (wars Pietsch?)

Damit hast du schon alles zusammen.

Dann - was passiert, wenn das script mehrfach aufgerufen wird?

  • Aus diesem Ordner möchte ich alle .pdf Daten in ein separates Verzeichnis kopieren, wenn sich mindestens 2 pdf-Dateien in diesem Ordner befinden.

Versteh den Hintergrund nicht...
Wenn die kopiert und nicht verschoben werden, sind da (fast immer) mehr als zwei Dateien drin, außer da macht einer was mit der Hand...

Gruß
karla123
karla123 30.07.2014 um 11:53:50 Uhr
Goto Top
Ja danach suche ich gleich. Aber wie gesagt ich habe wenig Ahnung von Batches!

Das Script soll nicht mehrmals aufgerufen werden (die Ordner ändern sich pro Monat, das Script würde ich dann jeden Monat an die Namen anpassen)

Also aus dem Ordner "belicht" sollen alle vorhandenen PDF´s wenn mindestens 2 PDF´s vorhanden sind in einen separaten Ordner kopiert werden. Eine Art Zwischensicherung von diesem Ordner.

Ich hoffe das ist Verständlich???
narthan
narthan 30.07.2014 aktualisiert um 11:57:51 Uhr
Goto Top
Moin Karla,

falls ich dein Problem richtig verstanden habe, ist das mit einer For-Schleife, wie Nr60730 schon angemerkt hat, ganz einfach zu lösen.

 @echo off
for /r "C:\Jahr\Monat01\" %%i in (*.pdf) do xcopy %%i "C:\User\Karla\Desktop\Kopie\"  

Pfade müsstest du selbstverständlich anpassen. face-wink Probier das doch mal und meld dich falls es wo hakt.

<Edit> hab jetzt erst die Bedingung mit den 2 PDF's gesehen....das ist noch nicht berücksichtigt, ich überleg aber mal gleich </Edit>

Gruß, narthan
karla123
karla123 30.07.2014 aktualisiert um 12:30:59 Uhr
Goto Top
Hallo Narthan,
vielen Dank für Deine Mühe!
also habe die Zeile eingegeben und die Fehlermeldung "in" kann syntaktisch an dieser Stelle nicht verarbeitet werden, bekommen

Kopiert der Batch denn wirklich alle PDF´s nur aus dem Ordner belicht? Oder kopiert er alle PDF´s aus den verschiedenen Unterordner unterhalb von Monat01?


LG Karla
karla123
karla123 30.07.2014 um 12:35:19 Uhr
Goto Top
Lieber Nr60730,
ich habe mir das Tutorial for Schleifen angeschaut und muss dir Mitteilen das ich da gar nicht durchsteige!
Die Schwierigkeit für mich ist die Unterverzeichnisse nach Monat01 zu überspringen (z.B. Anton, Ulrike etc. diese Ändern sich ständig) und in das Verzeichnis belicht zu gelangen.

LG Karla
Nr60730
Nr60730 30.07.2014 aktualisiert um 12:57:41 Uhr
Goto Top
Zitat von @karla123:

Lieber Nr60730,
ich habe mir das Tutorial for Schleifen angeschaut und muss dir Mitteilen das ich da gar nicht durchsteige!

Das macht nix - schreib wou hängst und wir helfen.

Aber nicht so stümperhaft wie Nartan - das sei versprochen.
@echo off für jemanden, der explizit schreibt "Anfänger" ist eher suboptimal.

Die Schwierigkeit für mich ist die Unterverzeichnisse nach Monat01 zu überspringen (z.B. Anton, Ulrike etc. diese Ändern sich ständig) und in das Verzeichnis belicht zu gelangen.

Wie ich bereits geschrieben habe - zuerst mußt du die Rahmenbedingungen festlegen.
"Ändern" sollte man da nix müssen, das macht eh keiner
Jahr\Monat01\Anton\belicht
ein (daher auch der Tipp zum Biber Tut)
Laufwerk\%date:~-4%\Monat%date:~-7,2%\Pfadx\belicht
ist da genügsamer.


Ich geb dir mal einen Tipp:
dir /s *.pdf
liefert dir eine liste allen Unterverzeichnissen mit der Anzahl Treffer.

dir /b /s *.pdf
liefert dir alle pdfs in () allen Unterverzeichnissen samt Pfadangaben.

Beides sind 1a Ansätze um das in einer Schleife durchzunudeln.



LG Karla
karla123
karla123 30.07.2014 um 14:31:47 Uhr
Goto Top
Lieber Nr60730,
vielen Dank für deinen Tip.
Da ich wie bereits beschrieben keine Ahnung von der Batch-Programmierung habe, kann ich auch keine Schleifen programmieren. Meine Kenntnisse beruhen auf das gute alte XCopy etc.

Dein Ansatz mit: Laufwerk\%date:~-4%\Monat%date:~-7,2%\Pfadx\belicht wird wohl funktionieren, nur wie komme ich in die jeweiligen Verzeichnisse belicht??

Wie beschrieben ich habe ein Hauptverzeichnis (Jahr)
ein Unterverzeichnis (Monat)
etliche Unterverzeichnisse bis zu 70 oder noch mehr (die Benamungen von diesen Unterverzeichnissen sind alle unterschiedlich)
in diesen verschiedenen (also 70 oder mehr) Unterverzeichnissen befindet sich in jedem Unterverzeichnis ein Ordner belicht und aus diesem belicht-Ordner sollen wenn er mindestens 2 PDF´s enthält, alle PDF´s (können 4 oder mehr sein) in ein Verzeichnis Kopie kopiert werden.

Ich stehe vor dem Problem die einzelnen 70 Unterordner zu öffnen und dann in den jeweiligen Ordner belicht zu gelangen?!

Verständlich???

LG Karla
Nr60730
Nr60730 30.07.2014 aktualisiert um 15:01:13 Uhr
Goto Top
Liebe Karla,

Ich müsste jetzt etwas länger ausholen, aber ich machs einfach mal...

  • Ein Admin steht immer unter Druck
  • Er muß nachvollziehbar seinen Job für potentielle Nachfolger / Revisoren durchziehen.

  • Das, was "irgendjemand" vorhat - geht "nur" mit einer Schleife.
  • Das Schleifen Tut ist wirklich (außer IQ < Haribo Goldbär) logisch aufgebaut
  • Jeder Befehl kennt ein /? oder manchmal auch /help.

Es gab vor längerer Zeit mal einen "User", der hat hier viel Zeit, Anleitungen usw, hinterllassen. Dann kam hier etwas Stress auf der Typ hatte die interne Revision am Hals und mußte sich den Vorwurf gefallen lassen vieles seiner Werke wären aus dem Internet abgekupfert - damit meinten die "diese" Seite. Dummerweise waren die meisten Antworten "Tuts" usw.. in einem Zeitraum veröffentlicht, wo andere Leute eigentlich arbeiten....

Mancher fand das dann nicht so lustig und der Typ hat seine Sachen dann hier weggenommen, um die interne Revision usw. vom Hals zu kriegen.

So ein paar "Spacken" die sich hier dann noch mit "Schreib doch auf Facebook wenn du mir nicht helfen magst usw." haben
da auch noch einen Beitrag geleistet.

Ergo:
Eine Hand wäscht die andere, aber einseifen mußt du dich leider selber.


Edit: sorry Friemler hatte irgendwie Pietsch im Verdacht...

Gruß
karla123
karla123 30.07.2014 um 15:29:17 Uhr
Goto Top
Lieber Nr60730,

es ist mir schon verständlich das die Beantwortung meiner Anfrage Zeit in Anspruch nimmt! Sicherlich sollte ich mir das Tutorial aneignen und damit beginnen Batches zu erlernen. Allerdings benötige ich diese sehr selten. Ich konnte nicht wissen wie schwierig und zeitaufwändig sich das Problem darstellt. In meinem jugendlichen Leichtsinn habe ich gedacht, in dem Forum sind Leute "die machen das mal eben"!
Tut mir also Leid das ich Eure Zeit in Anspruch genommen habe.

Nochmals vielen Dank für die Hilfe und Hinweise von Dir!!


Karla
Nr60730
Nr60730 30.07.2014 um 15:46:51 Uhr
Goto Top
grmblfixx..

das ist theoretisch ein "klacks"

Es bringt dir nix, wenn wir dir das vormalen - so wie da oben...

also habe die Zeile eingegeben und die Fehlermeldung "in" kann syntaktisch an dieser Stelle nicht verarbeitet werden, bekommen.

Das sagt mir - du hast eine Zeile direkt in die shell eingegeben - das war aber eine batch/cmd.
Auch das sollte in dem Tut drinstehen ein % cmd/shell zwei %% batch.

Was mir leid tut, ist wenn hier Zeit vergeudet wird - die geb ich gerne her - ich will aber auch was dafür.

das lächeln wenn man es selber hinbekommen hat obwohl der Weg steinig war, ist viel mehr wert als copy & paste und nix versteh warum wieso.
karla123
karla123 30.07.2014 um 16:16:08 Uhr
Goto Top
Das ist nun schon das zweite Mal das du für deine Zeit was willst. Was denn Geld???
Ich habe doch nun schon vorher bekundet das es mir Leid tut euch die Zeit gestohlen zu haben!!

Nun den "klacks" werde ich wohl kurzfristig anders lösen müssen! Danach werde ich mich mit dem Tutorial beschäftigen!

Also nochmal: Tut mir Leid das ich Eure Zeit in Anspruch genommen habe!!!!


Nochmals vielen Dank!!!
Nr60730
Nr60730 30.07.2014 um 16:37:25 Uhr
Goto Top
Das ist nun schon das zweite Mal das du für deine Zeit was willst. Was denn Geld???

Roflol - yupp und oben hab ich den Vorvertrag schonmal hingemalt. Wie bei einem Vertrag üblich, bitte nicht das kleingedruckte lesen.
Klartext - es bringt dir nix, wenn du etwas hast was du nicht verstehst und damit selber anpassen kannst.

  • Zeit stehlen ist sowas wie Raubkopieren face-wink Vielleicht (hoffentlich nicht) meinst du vergebene Mühe, das wär allerdings schade.

Von vorne:

  • warum kopieren?
  • warum diese Ordnernamen? (in einem Netzwerk kann man auch den Zeitstempel einer Datei verarbeiten und braucht u.Umständen solche "Krücken" nicht wirklich)

Diese zeile, die du da oben abgetippt hast - da mußt du (wenn du es so machst, wie vorher) aus den zwei %% eines machen!
Logischerweise deine Pfade vorher auch passend machen.

Das Ziel (zweiter Pfad) sollte dann aber nicht auf dem Destop liegen, das ist komplett unprofessionell (Servergespeicherte Profile; Produktiv [dein Destop] und Test [dieser] mischt man[n] /Frau nicht)

Gruß
bastla
Lösung bastla 30.07.2014, aktualisiert am 31.07.2014 um 15:26:19 Uhr
Goto Top
Hallo karla123 und willkommen im Forum!

Alle "belicht"-Ordner unterhalb von "D:\Jahr\Monat01\" erhältst Du zB per
for /f "delims=" %%i in ('dir /s/b/ad D:\Jahr\Monat01\belicht"') do echo Bearbeite "%%i"
- mit der Betonung auf "alle"; wenn es daher solche Ordner auch in anderen Ordnerebenen geben kann, bräuchtest Du eine Schleife der Art
for /d %%i in ("D:\Jahr\Monat01\*") do if exist "%%i\belicht" echo Bearbeite "%%i\belicht"  
- in "%%i" findest Du alle Unterordner von "D:\Jahr\Monat01", also lt Deinem Beispiel "Anton", "Ulrike", etc.

Das Kriterium "ab 2 enthaltenen pdf-Dateien" lässt sich leichter in einem Unterprogramm umsetzen - ungetestet etwa:
@echo off & setlocal
set "Basis=D:\Jahr\Monat01"  
set "Ordner="belicht"  
set "Typ=pdf"  
set "Ziel=D:\PDF gesammelt"  

for /d %%i in ("%Basis%\*") do if exist "%%i\%Ordner%\*.%Typ%" call :ProcessDir "%%i\%Ordner%"  
pause
goto :eof

:ProcessDir
set "Kopieren="  
for /f "skip=1 delims=" %%a in ('dir /b/a-d "%~1\*.%Typ%"') do set "Kopieren=True"  
if defined Kopieren echo xcopy "%~1\*.%Typ%" "%Ziel%\"  
goto :eof
Das "echo" vor dem "xcopy" sorgt dafür, dass der Ablauf nur simuliert wird (da so nicht kopiert, sondern nur der Kopier-Befehl ausgegeben wird) - soferne das Ergebnis gut aussieht, einfach das "echo" entfernen.

Wenn Du den Ablauf nachvollziehen willst, aus dem "echo off" ein "echo on" machen, und bei Fragen natürlich: fragen ... face-wink

Was noch zu bedenken wäre: Können gleichnamige pdf-Dateien in den verschiedenen "belicht"-Ordnern vorkommen?

Grüße
bastla
karla123
karla123 30.07.2014 um 17:23:29 Uhr
Goto Top
Hallo bastla,

Wow! Das werde ich morgen gleich mal testen!!

Ich habe mir nun schon einmal das o.g. Tutorial angeschaut und habe folgende "Lösung" gebastelt:

@echo off
for /r "C:\Jahr\Monat01\" %%i in ("belicht\*.pdf") do xcopy /CFRYV %%i "C:\User\Karla\Desktop\Kopie\"

Zu Deiner Frage: normalerweise sollten gleichnamige PDF-Dateien nicht vorkommen, aber jetzt wo du das sagst? Wäre doch möglich!

Melde mich morgen mit meinen Ergebnissen wieder!!


Vielen vielen Dank

LG Karla
karla123
karla123 31.07.2014 um 14:07:46 Uhr
Goto Top
Hallo bastla,

ich habe den Batch nun getestet und bin begeistert (habe in Zeile 3 noch ein " eingefügt) er funktioniert tadellos!!!

Zu deiner Frage wegen der gleichnamigen PDF-Dateien, das sollte normal nicht vorkommen. Wenn ja kommt doch eine Meldung von XCopy das die Datei schon vorhanden ist. Das dürfte genügen.

Eine Frage habe ich aber doch noch. Ist es ohne großen Aufwand möglich bei der Eingabe das zweite Unterverzeichnis (z.B. Monat01) per Eingabeaufforderung
zu ändern (also einen anderen Monat einzugeben)?

Falls das zuviel Aufwand ist dann lass es so!

Noch einmal möchte ich mich bei Dir ganz lieb bedanken!!!!

LG Karla
narthan
Lösung narthan 31.07.2014 aktualisiert um 15:26:27 Uhr
Goto Top
Hey,

da kann sogar ich "Stümper" vlt. helfen face-wink

Zitat von @karla123:
ich habe den Batch nun getestet und bin begeistert (habe in Zeile 3 noch ein " eingefügt) er funktioniert tadellos!!!

...hier hättest du kein Anführungszeichen einfügen müssen, das zwischen = und belicht ist eher zu viel.


Eine Frage habe ich aber doch noch. Ist es ohne großen Aufwand möglich bei der Eingabe das zweite Unterverzeichnis
(z.B. Monat01) per Eingabeaufforderung
zu ändern (also einen anderen Monat einzugeben)?

Mit dem set-Befehl und dem Zusatz /p kannst du eine Eingabe fordern und diese in einer Variable speichern.
set /p month="Bitte einen Monat eingeben:"  
echo %month%

Die echo Zeile dient nur für dich zum besseren Verständnis, kannst du gerne weglassen. Die set-Zeile ist entscheidend und muss zwischen der 1. und 2. Zeile von bastla's Code eingefügt werden. Außerdem musst du dann in der (derzeitigen) Zeile 2 das "Monat01" durch die Variable %month% ersetzen. Sprich:
@echo off & setlocal
set /p month="Bitte einen Monat eingeben:"  
set "Basis=D:\Jahr\%month%"  
)

Schönen Gruß, Stümper-narthan
karla123
karla123 31.07.2014 um 15:25:54 Uhr
Goto Top
Hallo Narthan,

na, das hört sich ja leicht "gekränkt" an??

Jedenfalls hat Deine Anweisung prima geklappt!!!

Auch Dir muss ich ein liebes Dankeschön sagen!

LG Karla
bastla
bastla 31.07.2014 um 15:27:32 Uhr
Goto Top
Hallo narthan!

Danke für die Ergänzug (und die Korrektur meines "Gestümperes" in Zeile 3 - es ist tatsächlich das Anführungszeichen nach dem "=" völllig unnötig) ... face-smile

Grüße
bastla
narthan
narthan 31.07.2014 um 15:28:23 Uhr
Goto Top
Zitat von @karla123:
na, das hört sich ja leicht "gekränkt" an??

Ja doch, gut erkannt face-big-smile

Jedenfalls hat Deine Anweisung prima geklappt!!!

Das freut mich! Gern geschehen! Falls du keine Fragen mehr hast, nicht vergessen die Frage zu schließen face-wink

Schöne Grüße, narthan