gerry56
Goto Top

Nervige Frage Datei oder Verzeichnis bei xcopy

Habe wieder einmal eine Frage.
In einer Batchdatei soll eine einzige Datei aus einem Verzeichnis zur Sicherung auf einen anderen Datenträger kopiert werden.
xcopy "C:\ProgramData\verzeichnis\verzeichnis2\datei.txt" %bname%":\sicherung\datum\verzeichnis\verzeichnis2\datei.txt" /e /h /r /y  
Da das ganze in einer Batchdatei ablaufen soll, und eventuell auch mehrere Dateien oder Verzeichnisse mitkopiert werden sollen, werden die Parameter /e /h /r mitverwendet.
Der Parameter /y soll die Abfrage für das Überscheiben unterbinden.

Das klappt auch, so lange in im Zielverzeichnis die Datei schon besteht.
Ist das Zielverzeichnis leer oder gar nicht vorhanden, kommt die blöde Meldung, ob das Ziel eine Datei oder ein Verzeichnis ist.

In der Hilfe gibt es keinen Parameter zur Unterdrückung dieser Abfrage.
Im Internet habe ich keine Hilfe dazu gefunden, außer ich soll Robocopy verwenden.
Um die lästige Abfrage bei Verzeichnissen zu unterdrücken, gibt es den Parameter I
Ich finde aber nirgends einen Parameter, mit dem ich xcopy mitteile, daß da Ziel eine Datei und kein Verzeichnis ist.

Lasse ich bei Ziel den Dateinamen weg, kopiert xcopy den kompletten Verzeichnisinhalt und nicht nur die gewünschte Datei.
xcopy "C:\ProgramData\verzeichnis\verzeichnis2\datei.txt" %bname%":\sicherung\datum\verzeichnis\verzeichnis2\" /e /h /r /y  

Bitte um Hilfe
Danke im voraus
Gerry

Content-ID: 668815

Url: https://administrator.de/forum/nervige-frage-datei-oder-verzeichnis-bei-xcopy-668815.html

Ausgedruckt am: 21.12.2024 um 15:12 Uhr

150704
150704 16.10.2024 aktualisiert um 18:19:11 Uhr
Goto Top
In einer Batchdatei soll eine einzige Datei aus einem Verzeichnis zur Sicherung auf einen anderen Datenträger kopiert werden.
Das nennt man Brett vorm Kopf face-big-smile => copy
viragomann
viragomann 16.10.2024 um 18:32:08 Uhr
Goto Top
Ich nehme auch lieber copy oder robocopy, weil weniger zickig.

Es sollte aber auch mit xcopy klappen.
Vielleicht wenn du die /e Option weglässt? Die ist eigentlich nur für Verzeichnisse gedacht.
wollekuj
wollekuj 16.10.2024 aktualisiert um 21:13:01 Uhr
Goto Top
Hallo,

ich bin nur am Smartphone daher nicht getestet aber
xcopy C:\ProgramData\verzeichnis\verzeichnis2 %bname%:\sicherung\datum\verzeichnis\verzeichnis2 /e /h /i /y 
/i geht davon aus dass alles was nicht existiert ein Verzeichnis ist. Da /e verwendet wurde werden auch alle Unterverzeichnisse kopiert./h kopiert hidden files und systemdateien mit. /y überschreibt vorhandene files.

/r könnte mit rein wenn es schreibgeschützte dateien gibt


Ich habe es auf das Verzeichnis geändert da die Anforderung sich widerspricht:
In einer Batchdatei soll eine einzige Datei...

Da das ganze in einer Batchdatei ablaufen soll, und eventuell auch mehrere Dateien oder Verzeichnisse mitkopiert werden sollen


Wenn das nicht hilft und es unbedingt per batch sein muss, dann hilft eine for each schleife
@echo off
setlocal

set source=C:\ProgramData\verzeichnis\verzeichnis2
set destination=%bname%:\sicherung\datum\verzeichnis\verzeichnis2

for %%F in ("%source%\*") do (  
    xcopy "%%F" "%destination%\%%~nF" /E /H /I /Y  
)

endlocal
oder gleich powershell
gerry56
gerry56 16.10.2024 um 21:01:17 Uhr
Goto Top
/e weglassen ändert nichts.
DivideByZero
DivideByZero 16.10.2024 aktualisiert um 21:40:35 Uhr
Goto Top
Moin,

natürlich funktioniert das.

xcopy "C:\ProgramData\verzeichnis\verzeichnis2\datei.txt" "A:\sicherung\datum\verzeichnis\verzeichnis2\" /h /r /y    

Das habe ich als Struktur angelegt, die Quelldatei besteht. Dann einfach das Zielverzeichnis, und gut ist.
Natürlich ohne /e, weil es ja um eine Datei, nicht um eine Verzeichnisstruktur geht.

Diese Variante fragt:
xcopy "C:\ProgramData\verzeichnis\verzeichnis2\datei.txt" "A:\sicherung\datum\verzeichnis\verzeichnis2\datei.txt" /h /r /y    

Aber das ist auch das dokumentierte Verhalten von xcopy. Und bei einer einzelnen Datei auch sinnentleert.

Lasse ich bei Ziel den Dateinamen weg, kopiert xcopy den kompletten Verzeichnisinhalt und nicht nur die gewünschte Datei.
xcopy "C:\ProgramData\verzeichnis\verzeichnis2\datei.txt" %bname%":\sicherung\datum\verzeichnis\verzeichnis2\" /e /h /r /y  

Nein, das tut es nicht. Du machst da etwas falsch.
Im Übrigen sind die Anführungszeichen, jedenfalls in diesem Code, falsch. Sie müssen alles umschließen und daher nicht nach %bname% beginnen.

Gruß

DivideByZero
gerry56
gerry56 17.10.2024 um 02:20:13 Uhr
Goto Top
Danke für den Hinweis mit den Anführungszeichen.
gerry56
gerry56 18.10.2024 um 16:32:00 Uhr
Goto Top
Das Hauptproblem mit der nervigen Frage ist leider noch immer nicht gelöst.
Der parameter /i teilt xcopy mit, daß das nicht vorhandene Ziel ein Verzeichnis ist.
Welchen nicht dokumentierten Parameter muß man setzen, um xcopy mitzuteilen, daß das nicht vorhandene Ziel eine Datei ist?

Oder hat Mickysoft nicht daran gedacht, daß auch Dateien kopiert werden könnten?
Andy24
Andy24 18.10.2024 um 17:30:47 Uhr
Goto Top
Huhu,

kannst Du mal probieren, ein "*" hinter dem Zielnamen anzugeben? Dann müsste der nicht fragen. Also so etwa:

xcopy quelle.txt ziel.txt*

Gefunden habe ich es hier: ss64.com/nt/xcopy.html (Abschnitt "Copy a single file")

Liebe Grüße, Andy
gerry56
gerry56 22.10.2024 aktualisiert um 01:39:09 Uhr
Goto Top
Hallo Andy!

Dein undokumentierter Tip mit dem Stern ist super.
Es funktioniert einwandfrei.

Leider habe ich beim weiteren testen einen neuen Fehler von Xcopy gefunden.

Soll eine Datei mit einem Leerzeichen im Dateinamen kopiert werden, verweigert Xcopy die Funktion.
Es wird gar nichts kopiert.

Ergänzung!
Wird die Zieldatei beim kopieren nicht umbenannt, funktionieren auch Dateien mit Leerzeichen im Namen.
Wird jedoch die Zieldatei umbenannt, stellt XCopy seine funktion ein, wenn der Dateiname ein Leerzeichen enthält.