mocca-kamil
Goto Top

Problem beim verschieben

Ich will dateien mit einer bestimmten Endung in einen Unterordner verschieben.

Hi Leute,

ich hab folgendes Problem.

Mit einem Befehl will ich ein Programm ausführen an den pdf-dateien im Ordner.
Das klappt auch und ist super dupi.
Allerdings will ich anschließend die Dateien in einen "\temp" unterordner verschieben.

Ich hab es versucht in Anlehung an diese Frage zu erstellen:
Batch -Dateien verschieben, Ordner löschen
allerdings klappt es bei mir nicht face-sad


Meine Zeile wäre folgende:

for %i in (\*_stamped.pdf) do @Move "%i\*_stamped.pdf" &rd "%i\temp"


Da ich auch ein Anfänger in Sachen Batch bin hab ich zudem eh noch paar Fragen.
nach move kommt %i was ja schön und gut ist und danach kommt
nach dem "&rd" nochmals ein %i weshalb den das?
Ich weiss...bestimmt eine Mega anfängerfrage aber ich hoffe doch ich krieg sie beantwortet face-wink

Schönen Tag noch und ich hoffe auf eine baldige Antwort, ich verzweifel hier fast...

Content-Key: 125148

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

Printed on: April 19, 2024 at 06:04 o'clock

Member: Biber
Biber Sep 17, 2009 at 10:07:23 (UTC)
Goto Top
Moin mocca-kamil,

willkommen im Forum.

Um dich mit den verschiedenen FOR-Varianten vertraut zu machen ist es das Sinnvollste, du spielst das ganze vorher am CMD-Prompt durch und ersetzt dabei den eigentlich auszuführenden Befehl (in deinem Fall "move") durch ein "@echo auszuführenderBefehl".

Öffne also ein CMD-Fenster und spiel deinen Befehl
for %i in (\*_stamped.pdf) do @echo move "%i\*_stamped.pdf" ^&rd "%i\temp"  
...am CMD-Prompt durch.
Dann siehst Du, an welcher Stelle das %i durch was ersetzt wird.
[Anmerkung: das "&" habe ich als "^&" maskiert, damit es auch nur angezeigt wird.]

Stöbere nebenbei in der Hilfe zu FOR (For/?).

Wenn denn dann die ersten Aha-Effekte da waren, dann poste die Rest-Fragen und wir klären den Rest.

Solange Du gar kein Verständnis dafür hast, was da passiert, solange hat es wenig Zweck, Dir eine funktionierende Zeile zu posten - das kanst Du dann niemals warten und pflegen.

Grüße
Biber
Member: mocca-kamil
mocca-kamil Sep 17, 2009 at 11:26:21 (UTC)
Goto Top
Mahlzeit Biber,


vielen Dank für die zügige Antwort!!

Ich hab jetzt allerdings folgendes Problem.
Wenn ich jetzt eintippe:
for %i in (\*_stamped.pdf) do @echo move "%~i*_stamped.pdf" &rd "%~pitemp"

erhalte ich "move.... " soweit...passt es!

wenn ich allerdings das @echo weglasse erhalte ich folgende Fehlermeldung:
"Dateiname exisitert bereits, oder die Datei konnte nicht gefunden werden"

Ich bin schier am verzeifeln daran. Was hab ich den jetzt daran falsch gemacht?
Wieso klappt es mit @echo?

Kann mir da jemand helfen`? face-sad
Member: Biber
Biber Sep 17, 2009 at 11:47:13 (UTC)
Goto Top
Moin mocca-kamil,


Wenn ich es richtig sehe, dann würdest du bei einer gefundenen Datei \xy_stamped.pdf ein 'move "\xy_stamped.pdf*stamped.pdf' erzeugen.

Und was Du brauchst, ist doch nur ein 'move "\xy_stamped.pdf" ' --> also ein 'move "%~i" <nachZiel>'.
Und lass erstmal dieses "rd whatever" weg. Da sind wir noch nicht.

Grüße
Biber
Member: pieh-ejdsch
pieh-ejdsch Sep 18, 2009 at 03:37:56 (UTC)
Goto Top
moin mocca-kamil,
@Biber
ja verkorkste dateinamen sind schuld und das fehlende Ziel für den MOVE

findet der MOVE etwa das Übergeordnete Verzeichnis nicht?....In welchen Verzeichnis bist Du im CMD

for %i in (\*_stamped.pdf) do @Move "%i\*_stamped.pdf" &rd "%i\temp"
so wie ich es verstanden habe willst Du die *_stamped .pdf aus dem Übergeordneten Ordner in den Aktuellen holen..... laut Befehl...
Bist Du also schon im temp drin? ... auf der CMD
Allerdings will ich anschließend die Dateien in einen "\temp" unterordner verschieben.
hier schreibst Du das Du die files reinschieben möchtetst also würdest Du Dich hier wiederum nicht im nicht im temp befinden.
dazu brauchst Du doch aber kein RD ...wenn Du diese files da reinschieben möchtest. RD löscht das Verzeichnis...

wenn Du im temp drin bist - dann mach mal so.. vllt geht das obwohl es eigentlich kürzer auch gehen müsste.

for %i in (\*_stamped.pdf) do @move "%~fi" "%~dpitemp\%~nxi"  

Gruß Phil
Member: mocca-kamil
mocca-kamil Sep 21, 2009 at 10:08:38 (UTC)
Goto Top
Hallöle Phil,

ich befinde mich in dem jeweiligen Ordner und will die Dateien in den Unterordner schieben.
Der Befehl ist soweit super und klappt aber trotzdem vielen Dank.

Habe allerdings jetzt ein anderes Problem!

Ich lass ja ein Programm über die PDF-Dateien laufen und bisher hat es immer gut geklappt wenn ich es getestet habe mit 5-10 PDFs.
Allerdings wenn ich jetzt 100 oder mehr habe läuft das Programm über alle PDFs mehrmals drüber wie kann ich den den Befehl

for %i in (*.pdf) do pdstamp stamp.txt %i %~ni_stamped.pdf

so umschreiben das er nur jeweils einmal pro pdf läuft. (einmal über die .pdf und es wird eine mit dem ende _stamped.pdf erzeugt).
Kann mir da jemand helfen?

Grüßle Kamil
Member: pieh-ejdsch
pieh-ejdsch Sep 21, 2009 at 11:03:31 (UTC)
Goto Top
normal durchläuft die Schleife ja nur einmal alle Dateien mit der Extension .pdf wieso dann mehrere Durchläufe, es sei denn die dateien sind noch nicht verschoben gewesen wenn Du die zeile nochmals eingibst.

for %i in (*.pdf) do pdstamp stamp.txt %i %~ni_stamped.pdf&&move %~ni_stamped.pdf temp
Member: Biber
Biber Sep 21, 2009 at 11:06:47 (UTC)
Goto Top
Moin Kamil,

das Problem kannst Du dadurch umgehen, dass Du die anfänglich vorhandenene DIR-Liste *.pdf in eine Textdatei schreibst und dann diese Textdatei mit der FOR-Anweisung durchnudelst.

Beispiel (am CMDprompt):
Dir /b [D:\einVerzeichnis\]*.pdf |findstr /v /i "_stamped.pdf">%temp%\ungestamptePDFs.txt  
FOR /F "delims=" %i in (%temp%\ungestamptePDFs.txt) do ....[wie bisher]  

Die zusätzliche FindStr-Einschränkung ist optional... hilft nur dagegen, dass aus einer bereits liegengebliebenen *.pdf-Datei eine xy_stamped_stamped_stamped.pdf wird.

Grüße
Biber
Member: pieh-ejdsch
pieh-ejdsch Sep 21, 2009 at 11:13:38 (UTC)
Goto Top
@ Biber
ich denke die forschleife durchläuft das aktuelle Verzeichnis einmal und gibt das ergebnis dann nacheinander aus. Ich habs grad probiert am promt mit

for %i in (*.txt) do @echo %i>"z%i"

es wird jede Textdatei nur einmal mit dem Text des Namens der Textdatei als zname.txt gespeichert...

wenn es anders sein würde hätte ich ja eine endlosschleife..

also brauchst Du auch keine Speicherung in eine txt
[edit]
achso für die liegengebliebenen gestampten... aber da könntest Du das finstr doch gleich in die Schleife einsetzen...
da ja die datei eh nur temporär gebraucht werden würde
[/edit]


Gruß Phil
Member: mocca-kamil
mocca-kamil Sep 21, 2009 at 11:20:08 (UTC)
Goto Top
man o man... ihr jungs seit echt super!
Problem ist gelöst, vielen Dank!!


Grüßle mocca