smorod
Goto Top

Batch und Copy - Die Datei kann nicht in sich selbst kopiert werden

Ich beschäftige mich gerade etwas mit Batch und habe noch nicht soviel Erfahrung, bin aber bereit zu lernen.
Bei meiner Datei die ich derzeit anlegen will bekomm ich immer folgende Meldung:

Die Datei kann nicht in sich selbst kopiert werden.
0 Datei(en) kopiert.

Hallo liebe Community,

wie oben schon geschrieben, versuche ich mich gerade an Batch Dateien.
Leider habe ich ein "Problem", was eigentlich kein Problem ist sondern mir einfach optisch in dem Batchablauf nich gefällt und mich stört.

Hier mal den Code:

@echo off

set quelle= %cd%
echo Welche Dateien sollen verschoben werden? (Bsp.: hdmgl_* verschiebt alle Dateien die mit hdmgl_ beginnen)
set /p dateien=
echo Ihre Eingabe lautet: %dateien%
pause
echo.
echo.
echo In welchen Ordner sollen die Dateien verschoben werden? (es können auch Unterordner angegeben werde. Bsp.: Dokumente\Privat )
set /p zielordner=
md "%zielordner%"  
ping -n 3 localhost  > nul
echo.
echo.
echo Die Dateien werden nun kopiert
for /R %%f in (%dateien%) do copy "%%f" "%cd%\%zielordner%" /Y  
pause
echo.
echo.
echo Sollen die Quelldateien gelöscht werden?
del "%cd%\"%dateien%"" /P  
Pause

Nun bekomm ich im Verlauf der Batch Datei aber folgende Zeilen angezeigt:
Die Datei kann nicht in sich selbst kopiert werden.
        0 Datei(en) kopiert.

Meine Suche im Internet hat ergeben, dass diese Zeile angezeigt wird, weil Quell- und Zieldatei identisch sind, was in dem Fall auch stimmt da ich den Dateinamen nicht ändern mag.

Wenn ich nun folgende Zeile:
for /R %%f in (%dateien%) do copy "%%f" "%cd%\%zielordner%" /Y  
zu
for /R %%f in (%dateien%) do copy "%%f" "\%zielordner%" /Y  
ändere, wird mir angezeigt, dass die Dateien kopiert werden, allerdings werden die Dateien nicht in dem Zielordner angezeigt.


Kann mir vielleicht jemand auf die Sprünge helfen?

Liebe Grüße,

Smorod

Content-Key: 177628

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

Printed on: April 23, 2024 at 08:04 o'clock

Member: Biber
Biber Dec 13, 2011 at 12:37:14 (UTC)
Goto Top
Moin Smorod,

nicht, dass ich der Frage ausweichen wollte - im Gegenteil, ich versuche mal, deinen Lernwillen zu berücksichtigen.

Deshalb die Rückfrage:
Soll der als Ziel der Übung der Fehlerfall vermieden werden oder ein möglicher Fehler ignoriert , also ausgeblendet werden?

Grüße
Biber
Mitglied: 60730
60730 Dec 13, 2011 at 12:40:28 (UTC)
Goto Top
moin,

nimm bitte das €echo off raus....

Zeile 12 - wenn der Ordner existiert oder wenn du Somderzeichen eiongibts - das wird nicht abgefangen.
Wenn quellordner und Ziel identisch sind dann?

Zeile 21 / 22 sind *hüstel*...


Gruß
Member: Skyemugen
Skyemugen Dec 13, 2011 at 13:00:37 (UTC)
Goto Top
Aloha,

... und zusätzlich noch:
set quelle= %cd%
sprich: " C:\Pfad\Verzeichnis" und
del "%cd%\"%dateien%"" /P  
sprich: "C:\Pfad\Verzeichnis\"type*""

killt sich spätestens ab Windows 7 eh von selbst face-wink

PENG!

So und jetzt warte ich erst einmal die Abarbeitung der Frage vom Biberle und T-Mos Hinweisen ab face-wink

greetz André
Member: Ravers
Ravers Dec 13, 2011 at 13:03:45 (UTC)
Goto Top
Tachien.

Kleiner Hinweis zum Thema face-wink

for /R %%f in (%dateien%) do copy "%%f" "%cd%\%zielordner%" /Y

Soweit ok, ABER:
Du sagst ihm er soll alle Dateien aus dem %cd%-Verzeichnis und alle darüber liegenden Dateien kopieren. *Klickerts?*

Nein?
Jetzt sagst du er soll in den Ordner TEST speichern, den er dann unter %cd%/Test anlegt. Und genau diese Dateien im Ordner TEST soll er auch nach %cd%\Test kopieren.
Legst du z.B. den Zielordner auf c:\temp\"DeineEingabe" und nicht auf %cd%\"DeineEingabe" löppts ohne Fehlermeldungen. ... aber vielleicht stören die Meldungen nicht (echo off), denn funktionieren tuts auch so.

greetz
ravers
Member: bastla
bastla Dec 13, 2011 at 16:16:45 (UTC)
Goto Top
... und auch noch etwas Senf von mir:

Es gibt Situationen, in denen "%cd%" sinnvoll verwendet werden kann - das hier ist keine.

Und außerdem: Ein "copy" in einem Batch braucht kein "/Y" - das überschreibt auch so.

Schließlich: Es muss nicht "for /R" sein - ein "for /F "delims="" zusammen mit einem "dir /s /b /a-d" hat auch seinen Charme (es ging ja eigentlich mal um "Die Datei kann nicht in sich selbst kopiert werden") ...

Grüße
bastla
Member: smorod
smorod Dec 14, 2011 at 08:12:45 (UTC)
Goto Top
Hi alle,

danke erstmal für die vielen Antworten! Ich werd mich später nochmal Melden wenn ich dazu gekommen bin, mir etwas Zeit zu nehmen alle Antworten genau durchzulesen und einen neuen Versuch gestartet habe meine Batch Datei anzupassen.

LG
Smorod
Member: smorod
smorod Dec 14, 2011 at 11:50:33 (UTC)
Goto Top
So hab mal ganz kurz Zeit auf eure Antworten zu antworten face-smile

Zitat von @Biber:
Soll der als Ziel der Übung der Fehlerfall vermieden werden oder ein möglicher Fehler ignoriert , also ausgeblendet
werden?

Meiner Meinung nach sollen Fehler nur ignoriert werden, wenn es anders absolut nicht möglich ist. Sprich ich würd den Fehlerfall gerne vermeiden.


Zitat von @60730:
Zeile 12 - wenn der Ordner existiert oder wenn du Somderzeichen eiongibts - das wird nicht abgefangen.

Ok, daran habe ich noch gar nicht gedacht.
1. Sprich hier überprüfe ich mit eine if Abfrage, ober der angegbene Ordner schon existiert, wenn ja mit dem goto Befehl zum nächsten Schritt, ansonsten Ordner erstellen.
2. Für das Abfangen der Sonderzeichen muss ich mich erst schlau lesen.

Zitat von @60730:
Wenn quellordner und Ziel identisch sind dann?

Hmm, ist die Frage jetzt im Sinne von Quellordner = Zielordner, dann wäre das Kopieren/Verschieben ja unnötig. (Vielleicht versteh ich dich auch gerade nicht face-smile)


Zitat von @Ravers:
Legst du z.B. den Zielordner auf c:\temp\"DeineEingabe" und nicht auf %cd%\"DeineEingabe" löppts ohne
Fehlermeldungen

Stimmt, wenn ich einen Ordner außerhalb des Quellverzeichnisses angebe, kommt die Fehlermeldung nicht.

Zitat von @Skyemugen:
... und zusätzlich noch:
set quelle= %cd%
sprich: " C:\Pfad\Verzeichnis" und
del "%cd%\"%dateien%"" /P  
sprich: "C:\Pfad\Verzeichnis\"type*""

killt sich spätestens ab Windows 7 eh von selbst face-wink

Mein Windows 7 hat sich "noch" nicht gekillt :D aber danke für die Info. Das war noch ein Überbleibsel vom Testen face-smile

Zitat von @bastla:
Und außerdem: Ein "copy" in einem Batch braucht kein "/Y" - das überschreibt auch so.

Schließlich: Es muss nicht "for /R" sein - ein "for /F "delims="" zusammen mit einem
"dir /s /b /a-d" hat auch seinen Charme (es ging ja eigentlich mal um "Die Datei kann nicht in sich
selbst kopiert werden
") ...

Zum erste Punkt: Dies ist auch ein Überbleibsel vom vorigen Testen mit "xcopy".
Zum zweiten: Werde ich mir dann auch einmal anschauen!


So hoffe ich habe jetzt keinen vergessen. Ich bedanke mich schon mal für die Tipps. Ich werde meine Batchdatei mal anpassen und mich ncohmal melden wenn ich soweit bin ;)

LG Smorod
Member: Biber
Biber Dec 17, 2011 at 15:10:07 (UTC)
Goto Top
Moin Smorod,

Zitat von @smorod:
.... Ich werde meine Batchdatei mal anpassen und mich ncohmal melden wenn ich soweit bin ;)
Gibt es schon erste vorsichtige Schätzungen, wann das sein wird?
Können/sollen wir noch beim Sortieren helfen?

Grüße
Biber
Member: smorod
smorod Dec 19, 2011 at 09:55:03 (UTC)
Goto Top
So guten Morgen an alle face-smile

Sorry, dass ich mich jetzt erst melde, hatte etwas viel um die Ohren.

So hier dann mal der überarbeitete Code:

echo Welche Dateien sollen verschoben werden? (Bsp.: hdmgl_* verschiebt alle Dateien die mit hdmgl_ beginnen)
set /p dateien=
echo Ihre Eingabe lautet: %dateien%
pause
echo.
echo.
echo In welchen Ordner sollen die Dateien verschoben werden? (es können auch Unterordner angegeben werde. Bsp.: Dokumente\Privat )
set /p zielordner=
if exist "..\%zielordner%" GOTO ping  
md "..\%zielordner%"  
echo Zielverzeichnis wurde angelegt!
:ping
ping -n 3 localhost  > nul
echo.
echo.
echo Die Dateien werden nun kopiert
for /R %%f in (%dateien%) do copy "%%f" "..\%zielordner%"  
pause

Bevor jetzt das Geschreie losgeht: Ja ich weiss, ich habe den Tipp von bastla noch nicht berücksichtigt face-smile. Wie gesagt, hatte bissi was zu tun, werde mir das aber noch anschauen.

So dieser Batchcode funktioniert soweit ganz gut, jetzt habe ich nur das Problem, dass wenn ich für die Dateien folgende Eingabe mache: *.txt,
auch alle *.txt Dateien aus allen Unterordnern kopiert werden.
Glaube das war das Problem das Ravers beschrieben hat.

Wie stelle ich es an, dass nur die *.txt Dateien aus dem aktuellen Ordner kopiert werden?


Dann wäre noch die Frage, ob dies dann einer "saubere"/"schöne" Lösung ist um die oben gemeldete Fehlermeldung zu vermeiden oder wie würdet Ihr das lösen?

LG
Smorod
Member: bastla
bastla Dec 19, 2011 at 11:13:47 (UTC)
Goto Top
Hallo smorod!

Am Tipp von bastla lässt sich auch "dir /s /b /a-d" auf "dir /b /a-d" ändern ... face-wink

... oder Du verzichtest in Deinem derzeitigen Ansatz einfach auf "/R".
Noch einer zum Thema "verzichten": Anstelle von
if exist "..\%zielordner%" GOTO ping   
md "..\%zielordner%"   
echo Zielverzeichnis wurde angelegt! 
sollte es auch
md "..\%zielordner%" 2>nul && echo Zielverzeichnis wurde angelegt! 
tun ...

Grüße
bastla
Member: smorod
smorod Dec 19, 2011 at 12:10:08 (UTC)
Goto Top
Zitat von @bastla:
Am Tipp von bastla lässt sich auch "dir /s /b /a-d" auf "dir /b /a-d" ändern ... ;.-)

Gerade getestet face-smile Damit kann ich die Dateien dann auch in einen Unterordner vom Quellordner kopieren, ohne eine Fehlermeldung zu bekommen.

Noch einer zum Thema "verzichten": Anstelle von
if exist "..\%zielordner%" GOTO ping   
> md "..\%zielordner%"   
> echo Zielverzeichnis wurde angelegt! 
> 
sollte es auch
md "..\%zielordner%" 2>nul && echo Zielverzeichnis wurde angelegt! 
> 
tun ...

Frage dazu:
Deine Zeile macht eigentlich das Gleiche wie die if exist Zeile, nur dass bei dir das errorlevel überprüft wird. Lieg ich da richtig?

Nochmals Danke und LG

Smorod
Member: bastla
bastla Dec 19, 2011 at 18:29:27 (UTC)
Goto Top
Hallo smorod!
Deine Zeile macht eigentlich das Gleiche wie die if exist Zeile, nur dass bei dir das errorlevel überprüft wird. Lieg ich da richtig?
Jein; es wird einfach ohne Existenzprüfung (die erfolgt ja ohnehin implizit) versucht, den Zielordner zu erstellen (und dür den Fall, dass es den schon gibt, die Fehlermeldung per "2>nul" ins Nirwana befördert) - wenn der Ordner tatsächlich erstellt wurde, kann auf Basis des Errorlevels (hast Du richtig interpretiert face-smile) noch die gewünschte Meldung ausgegeben werden ...

Grüße
bastla
Member: Biber
Biber Dec 19, 2011 at 19:18:20 (UTC)
Goto Top
Moin smorod,

noch eine Fussnote zu bastlas Antwort.

Mir liegt eher die "IF NOT EXIST "..\bla\%zielordner%" md "..\bla\%zielordner%" .-Variante

Ist für mich "lesbarer" oder der "nachvollziehbarere Code" ( WENN noch nix existiert DANN anlegen [SONST halt nüscht])
-> Kann ich besser lesen, weil die Einzel-Schritte meinem erwarteten Vorgehensmuster entsprechen.

Andererseits muss ich zugeben:
das "md ""..\bla\%zielordner%" auf jeden Fall und wenn es Fehler gibt, dann ignorieren" ....
----> geht bei ein paar 10000 Ordnern etwas schneller als das "erst prüfen und ggf. anlegen"

Wobei "schneller" natürlich bei den heutigen Kampfstern-Galactica-Rechnern nur noch knapp überhaupt messbar ist.
Du kannst in der eingesparten Zeit jetzt keine größeren Puzzles fertigstellen oder Apfelmännchen schnitzen oder so.....

Grüße
Biber
Member: smorod
smorod Dec 20, 2011 at 08:03:32 (UTC)
Goto Top
Guten Morgen an alle face-smile

Ich danke euch nochmal für die vielen Tipps und Hilfestellungen!

Zitat von @Biber:
noch eine Fussnote zu bastlas Antwort.

Mir liegt eher die "IF NOT EXIST "..\bla\%zielordner%" md "..\bla\%zielordner%" .-Variante

Das fällt mir derzeit auch (noch) einfacher, da es etwas überschaubarer ist wenn man gerade in die ganze Batchgeschichte einsteigt.

---

Das eigentliche Problem ist ja gelöst, somit werd ich den Thread auch auf gelöst stellen.

Jetzt werde ichmich dann noch mit dem Abfangen von Sonderzeichen beschäftigen, aber das wird eine neue Geschichte face-smile.


LG
Smorod
Member: Skyemugen
Skyemugen Dec 20, 2011 at 11:30:15 (UTC)
Goto Top
Zitat von @smorod:
Jetzt werde ichmich dann noch mit dem Abfangen von Sonderzeichen beschäftigen, aber das wird eine neue Geschichte face-smile.
Umlaute (chcp 1252) oder Sonderzeichen (setlocal enabledelayedexpansion oder VBS)? face-wink

beachte das dann bitte im nächsten Thread oder bei deiner Forensuche face-wink

greetz André
Member: smorod
smorod Dec 20, 2011 at 13:09:37 (UTC)
Goto Top
Hey André

glaub für mich wären jetzt da die Sonderzeichen wichtig, aber werde deinen Tipp beachten :D

Danke und LG

Smorod