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

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

Frage Entwicklung Batch & Shell

Mitglied: smorod

smorod (Level 1) - Jetzt verbinden

13.12.2011 um 13:21 Uhr, 4637 Aufrufe, 16 Kommentare

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:

01.
@echo off 
02.
 
03.
set quelle= %cd% 
04.
echo Welche Dateien sollen verschoben werden? (Bsp.: hdmgl_* verschiebt alle Dateien die mit hdmgl_ beginnen) 
05.
set /p dateien= 
06.
echo Ihre Eingabe lautet: %dateien% 
07.
pause 
08.
echo. 
09.
echo. 
10.
echo In welchen Ordner sollen die Dateien verschoben werden? (es können auch Unterordner angegeben werde. Bsp.: Dokumente\Privat ) 
11.
set /p zielordner= 
12.
md "%zielordner%" 
13.
ping -n 3 localhost  > nul 
14.
echo. 
15.
echo. 
16.
echo Die Dateien werden nun kopiert 
17.
for /R %%f in (%dateien%) do copy "%%f" "%cd%\%zielordner%" /Y 
18.
pause 
19.
echo. 
20.
echo. 
21.
echo Sollen die Quelldateien gelöscht werden? 
22.
del "%cd%\"%dateien%"" /P 
23.
Pause
Nun bekomm ich im Verlauf der Batch Datei aber folgende Zeilen angezeigt:
01.
Die Datei kann nicht in sich selbst kopiert werden. 
02.
        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:
01.
for /R %%f in (%dateien%) do copy "%%f" "%cd%\%zielordner%" /Y
zu
01.
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
Mitglied: Biber
13.12.2011 um 13:37 Uhr
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
Bitte warten ..
Mitglied: 60730
13.12.2011 um 13:40 Uhr
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ß
Bitte warten ..
Mitglied: Skyemugen
13.12.2011 um 14:00 Uhr
Aloha,

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

killt sich spätestens ab Windows 7 eh von selbst

PENG!

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

greetz André
Bitte warten ..
Mitglied: Ravers
13.12.2011 um 14:03 Uhr
Tachien.

Kleiner Hinweis zum Thema

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
Bitte warten ..
Mitglied: bastla
13.12.2011 um 17:16 Uhr
... 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
Bitte warten ..
Mitglied: smorod
14.12.2011 um 09:12 Uhr
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
Bitte warten ..
Mitglied: smorod
14.12.2011 um 12:50 Uhr
So hab mal ganz kurz Zeit auf eure Antworten zu antworten

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 )


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:
01.
set quelle= %cd%
sprich: " C:\Pfad\Verzeichnis" und
01.
del "%cd%\"%dateien%"" /P
sprich: "C:\Pfad\Verzeichnis\"type*""

killt sich spätestens ab Windows 7 eh von selbst

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

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
Bitte warten ..
Mitglied: Biber
17.12.2011 um 16:10 Uhr
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
Bitte warten ..
Mitglied: smorod
19.12.2011 um 10:55 Uhr
So guten Morgen an alle

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

So hier dann mal der überarbeitete Code:

01.
echo Welche Dateien sollen verschoben werden? (Bsp.: hdmgl_* verschiebt alle Dateien die mit hdmgl_ beginnen) 
02.
set /p dateien= 
03.
echo Ihre Eingabe lautet: %dateien% 
04.
pause 
05.
echo. 
06.
echo. 
07.
echo In welchen Ordner sollen die Dateien verschoben werden? (es können auch Unterordner angegeben werde. Bsp.: Dokumente\Privat ) 
08.
set /p zielordner= 
09.
if exist "..\%zielordner%" GOTO ping 
10.
md "..\%zielordner%" 
11.
echo Zielverzeichnis wurde angelegt! 
12.
:ping 
13.
ping -n 3 localhost  > nul 
14.
echo. 
15.
echo. 
16.
echo Die Dateien werden nun kopiert 
17.
for /R %%f in (%dateien%) do copy "%%f" "..\%zielordner%" 
18.
pause
Bevor jetzt das Geschreie losgeht: Ja ich weiss, ich habe den Tipp von bastla noch nicht berücksichtigt . 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
Bitte warten ..
Mitglied: bastla
19.12.2011 um 12:13 Uhr
Hallo smorod!

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

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

Grüße
bastla
Bitte warten ..
Mitglied: smorod
19.12.2011 um 13:10 Uhr
Zitat von bastla:
Am Tipp von bastla lässt sich auch "dir /s /b /a-d" auf "dir /b /a-d" ändern ... ;.-)

Gerade getestet 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
01.
if exist "..\%zielordner%" GOTO ping  
02.
> md "..\%zielordner%"  
03.
> echo Zielverzeichnis wurde angelegt!  
04.
> 
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
Bitte warten ..
Mitglied: bastla
19.12.2011 um 19:29 Uhr
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 ) noch die gewünschte Meldung ausgegeben werden ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
19.12.2011 um 20:18 Uhr
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
Bitte warten ..
Mitglied: smorod
20.12.2011 um 09:03 Uhr
Guten Morgen an alle

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 .


LG
Smorod
Bitte warten ..
Mitglied: Skyemugen
20.12.2011 um 12:30 Uhr
Zitat von smorod:
Jetzt werde ichmich dann noch mit dem Abfangen von Sonderzeichen beschäftigen, aber das wird eine neue Geschichte .
Umlaute (chcp 1252) oder Sonderzeichen (setlocal enabledelayedexpansion oder VBS)?

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

greetz André
Bitte warten ..
Mitglied: smorod
20.12.2011 um 14:09 Uhr
Hey André

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

Danke und LG

Smorod
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Ordner per Batch verschieben, Datei kopieren (2)

Frage von Shape.Shifter zum Thema Batch & Shell ...

Windows 10
Batch: Copy file.txt Lokaler Drucker (1)

Frage von fluluk zum Thema Windows 10 ...

Batch & Shell
gelöst Nach xcopy feststellen, ob Datei kopiert wurde oder nicht (9)

Frage von Scar61 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...