Seite 1 von 2
Richtige Syntax beim Kopieren
Verfasst: 05.07.2021, 20:18
von daghaedd
Hallo,
ich möchte alle JPG Dateien des LW’s D in ein Verzeichnis kopieren. Habe das früher mal gekonnt, aber alles vergessen.
Mit CMD habe ich folgenden Befehl eingegeben:
C:\WINDOWS\system32>xcopy d:*jpg d:\jpg-bilder-02
D:\jpg-bilder-02 überschreiben (Ja/Nein/Alle)? j
D:FB7490 xxxxx.jpg
D:\jpg-bilder-02 überschreiben (Ja/Nein/Alle)? a
D:Fritz-Box Rechnung 7490.jpg
D:Screenshot_20191116_131128.jpg
D:Süper Backup 01.jpg
D:Word Schreibschutz aufheben.jpg
D:Word Schreibschutz funktioniert nicht.jpg
D:Word Schreibschutz01.jpg
7 Datei(en) kopiert
C:\WINDOWS\system32
Aber schon bei der zweiten Datei griff der Schreibschutz bei einer Datei und es wurde nur einige Datei übertragen.
Wie müsste die Syntax lauten?
Gruß,
Dag
Re: Richtige Syntax beim Kopieren
Verfasst: 10.07.2021, 09:54
von daghaedd
Niemand da, der sich mit der Syntax auskennt?
Kann ich mir nicht vorstellen.
Gruß,
Dag
Re: Richtige Syntax beim Kopieren
Verfasst: 10.07.2021, 15:44
von ecerer
Eventuell ist die Frage, wie für mich auch, nicht klar!
7 Datei(en) kopiert ist falsch?
Re: Richtige Syntax beim Kopieren
Verfasst: 10.07.2021, 18:55
von daghaedd
Mit Copy habe ich auch versucht. Kam auch nichts raus.
Re: Richtige Syntax beim Kopieren
Verfasst: 11.07.2021, 14:54
von wengbox
Hallo Dag,
du hast die Antwort von ecerer nicht für voll genommen.(?) Die Syntax von xcopy bekommst du mit "xcopy /?" ausführlich angezeigt.
Gruß wengbox
Re: Richtige Syntax beim Kopieren
Verfasst: 12.07.2021, 09:29
von Holgi
fehlt da nicht schon mal ein Backslash und ein Punkt?
xcopy d:*jpg d:\jpg-bilder-02
xcopy d:\*.jpg d:\jpg-bilder-02
hier mal ein paar Beispiele aus meiner Sammlung:
xcopy "C:\Calibre\PFiles\Calibre" "%homedrive%%homepath%\Downloads\PortableAppz\PortableApps\calibrePortable\App\Calibre" /i /y /s
xcopy "%~dp0DVDFAB\" "%Programfiles(x86)%\DVDFAB\" /i /y /s /e 1>NUL 2>NUL
xcopy "%homepath%\Downloads\Portable.Thunderbird.Updater\updates\" "%homepath%\Downloads\Portable.Thunderbird.Updater\Thunderbird Stable x86\updates\" /i /y /s /e
XCOPY /y "C:\Kodi\"* "%homepath%\Downloads\PortableAppz\PortableApps\KodiPortable\App\Kodi\" /s /i
Ich kann dir aber auch das Microsoft eigene ROBOCOPY ans Herz legen. Braucht auch etwas Einarbeitungszeit, ist aber sauschnell und intelligent. Gibt auch grafische Oberfläche dafür. Ich nutze faroby (uralt).
Beispiel:
SETLOCAL
SET _source="%homepath%\Downloads\TEST"
SET _dest="D:\Downloads\TEST"
SET Robocopy="%windir%\System32\Robocopy.exe"
SET _what=/COPYALL /B /MIR
:: /COPYALL :: COPY ALL file info
:: /B :: copy files in Backup mode.
:: /MIR :: MIRror a directory tree
SET _options=/R:0 /W:0 /LOG:C:\batch\RoboLog.txt /NFL /NDL
:: /R:n :: number of Retries
:: /W:n :: Wait time between retries
:: /LOG :: Output log file
:: /NFL :: No file logging
:: /NDL :: No dir logging
%ROBOCOPY% %_source% %_dest% %_what% %_options%
Re: Richtige Syntax beim Kopieren
Verfasst: 12.04.2025, 17:20
von Hemingway
Guten Tag, Holgi und allen, die das lesen,
hoffentlich ist dieser Thread noch am Leben ...
Vor vielen Jahren hatte ich mal die Syntax drauf, wie man in einer CMD/Batch bei xcopy die Frage "(D = Datei, V = Verzeichnis)" automatisch beantworten konnte. Das war sowas wie /D anhängen, aber ich finde nichts mehr dazu. Nun bräuchte ich den Trick nochmal für eine Sicherungsroutine.
Ich weiß, das ist Uraltkram und es gibt ganz tolle modernere Lösungen, aber bitte schreibt mir einfach nur die Antwort auf meine Frage.
Herzlichen Dank und ein herrliches Sonnenwochenende!
Re: Richtige Syntax beim Kopieren
Verfasst: 12.04.2025, 17:33
von Blondi_2021
Re: Richtige Syntax beim Kopieren
Verfasst: 12.04.2025, 17:52
von Holgi
oder meinst du so etwas wie das hier?:
Code: Alles auswählen
@echo off
setlocal
:: Benutzereingaben
set /p source="Geben Sie den Quellpfad an (z. B. D:\Daten oder D:\Datei.txt): "
set /p destination="Geben Sie das Zielverzeichnis an (z. B. E:\Backup): "
:: Existenz prüfen
if not exist "%source%" (
echo Fehler: Der Quellpfad existiert nicht!
pause
exit /b
)
:: Quelle analysieren (Datei oder Ordner?)
if exist "%source%\" (
echo Quelle ist ein Verzeichnis.
) else (
echo Quelle ist eine Datei.
)
:: Zielverzeichnis erstellen, wenn nicht vorhanden
if not exist "%destination%" (
echo Zielverzeichnis wird erstellt...
mkdir "%destination%"
)
:: Kopiervorgang abhängig vom Quelltyp
if exist "%source%\" (
xcopy "%source%" "%destination%" /E /I /Y /D
) else (
copy /Y "%source%" "%destination%"
)
echo Kopiervorgang abgeschlossen.
pause
Der Trick ist das Anfügen eines Backslashs am Pfad:
Wenn %source%\ existiert, ist es ein Verzeichnis.
Wenn %source% existiert, aber %source%\ nicht, ist es wahrscheinlich eine Datei.
Code: Alles auswählen
if exist "%source%\" (
echo Es handelt sich um ein Verzeichnis.
) else (
echo Es handelt sich um eine Datei.
)
Eine andere Möglichkeit wäre das mit Attrib zu lösen:
Code: Alles auswählen
attrib "%source%" | find /i "D" >nul
if %errorlevel%==0 (
echo Es ist ein Verzeichnis.
) else (
echo Es ist eine Datei.
)
Re: Richtige Syntax beim Kopieren
Verfasst: 12.04.2025, 23:45
von Hemingway
Vielen Dank euch beiden für die Mühe! Ich muss meine Frage doch etwas präzisieren. Im learn-microsoft-Artikel ist das Problem erfasst, aber leider nicht die Lösung, an die ich mich erinnere.
Bei MS heißt es im Abschnitt "Angeben, ob das Ziel eine Datei oder ein Verzeichnis ist":
Does <Destination> specify a file name or directory name on the target (F = file, D = directory)?
Drücken Sie F, wenn die Datei oder die Dateien in eine Datei kopiert werden sollen. Drücken Sie D, wenn die Datei oder die Dateien in ein Verzeichnis kopiert werden sollen.
Das
Drücken soll nach dem (in der CMD natürlich verborgenen) "Erscheinen" der Meldung automatisch erfolgen.
Die Befehlszeilenoption /i passt nicht, weil ich eine Lösung nur für Dateien suche.
Dafür gibt es die (funktionierende) Syntax "XCOPY quellpfad\dateiname zielpfad\dateiname*", wobei das Sternchen signalisiert, dass dateiname eine Datei ist und kein Verzeichnis. Dabei könnte ich es belassen.
Meine Erinnerung war aber eine Syntax wie
"XCOPY quellpfad\dateiname zielpfad\dateiname <D" oder
"XCOPY quellpfad\dateiname zielpfad\dateiname | D" oder ähnlich, wobei das Symbol ("<", "|" o.ä. - "pipe"?)) bewirkt, dass das nachfolgende Zeichen als Eingabe des Users interpretiert wird.
Das geht natürlich auch mit anderen DOS-Befehlen, die z.B. ein JA oder NEIN fordern oder einen Namen ("Geben Sie das Top-PC-Hilfeforum ein: | Deskmodder"

)
Ich hab das schon ausprobiert, aber es klappt nicht.
Re: Richtige Syntax beim Kopieren
Verfasst: 13.04.2025, 00:05
von Holgi
Kannst du vlt. mal ein konkretes Beispiel geben, was das Script können soll? So mit Beispiel von Quelle(n) und Ziel(en)? So ist mir das zu abstrakt.
Re: Richtige Syntax beim Kopieren
Verfasst: 13.04.2025, 01:08
von Blondi_2021
wenn ich das richtig verstehe braucht du die " Ohne Pause" Syntax (Ms- Dos) ? Hab zwar keine Ahnung aber lese gerne mit und lerne dabei Unmengen an Sachen die mich früher nie Intressiert hätten.Habs mal hervor gehoben.
Drücken Sie F, wenn die Datei oder die Dateien in eine Datei kopiert werden sollen. Drücken Sie D, wenn die Datei oder die Dateien in ein Verzeichnis kopiert werden sollen.
Das Drücken soll nach dem (in der CMD natürlich verborgenen) "Erscheinen" der Meldung automatisch erfolgen.
Die Befehlszeilenoption /i passt nicht, weil ich eine Lösung nur für Dateien suche.
Re: Richtige Syntax beim Kopieren
Verfasst: 13.04.2025, 10:53
von Hemingway
Hier konkreter Code.
Die Testreihe zeigt, dass die Frage nach D oder V nur beim ersten Aufruf des Ziel-Dateinamens kommt. Bei wiederholtem Aufruf des Befehls scheint sich das System gemerkt zu haben, dass man D will.
Möglicherweise wird das erst bei PC-Neustart gelöscht.
XCOPY E:\123.ext D:\ziel1.ext1 /y /q –> führt zur Frage nach D oder V (beim ersten Mal).
XCOPY E:\123456.ext D:\ziel1.ext1 /y /q –> kopiert ohne Rückfrage.
XCOPY E:\123.ext D:\ziel2.ext1 /y /q –> führt zur Frage nach D oder V (beim ersten Mal).
XCOPY E:\123.ext D:\ziel1.ext2 /y /q –> führt zur Frage nach D oder V (beim ersten Mal).
XCOPY E:\123.ext D:\ziel1.ext2 /y /q –> kopiert ohne Rückfrage.
XCOPY E:\ABC.doc D:\DEF.txt /y /q –> kopiert ohne Rückfrage, wenn schon in früherem CMD-Fenster verwendet.
XCOPY E:\123.ext F:\ /y /q –> kopiert ohne Rückfrage (Ziel erstmalig verwendet)
XCOPY E:\whatever.ddd F:\ /y /q –> kopiert ohne Rückfrage
XCOPY E:\whatever.ddd F:\Docs /y /q |D –> Fehlermeldung wg. unbekanntem Befehl "D"
XCOPY E:\whatever.ddd F:\Docs /y /q –> kopiert ohne Rückfrage!
ABER:
XCOPY E:\whatever.ddd F:\Media /y /q –> kopiert ohne Rückfrage!
XCOPY E:\whatever.ddd G:\Media /y /q –> kopiert ohne Rückfrage!
Das verstehe wer will. Ich kann keine Regel erkennen ...
Falls eine Pipe-Lösung existiert, müsste ich herausfinden, was passiert, wenn jedem Befehl IMMER das "D" angehängt wird.
Re: Richtige Syntax beim Kopieren
Verfasst: 13.04.2025, 12:42
von Holgi
Hemingway hat geschrieben: 13.04.2025, 10:53
Die Testreihe zeigt, dass die Frage nach D oder V nur beim ersten Aufruf des Ziel-Dateinamens kommt. Bei wiederholtem Aufruf des Befehls scheint sich das System gemerkt zu haben, dass man D will.
Möglicherweise wird das erst bei PC-Neustart gelöscht.
Beim wiederholten Aufruf ist die Datei ja schon vorhanden.
XCOPY muss bei unbekannten Zielpfaden raten – und fragt deshalb D/V. Sobald es das Ziel kennt (weil es schon existiert), entfällt die Frage. Was sich XCOPY „merkt“, hängt von temporären Dateien oder Pfadprüfungen des Dateisystems ab.
Beim ersten Aufruf:
gibt's die Nachfrage, weil das Ziel noch nicht existiert.
Beim zweiten Mal:
gibt's keine Nachfrage, weil D:\ziel1.ext1 jetzt bereits angelegt wurde (als Datei oder durch temporären Pfad). Windows „weiß“ also jetzt: „Ah ja, das ist ne Datei!“.
Also immer explizit ein Backslash angeben, wenn du ein Verzeichnis meinst.
Oder das Ziel vorher anlegen, damit XCOPY nicht raten muss.
Oder COPY statt XCOPY nutzen, wenn du nur eine Datei kopieren willst – COPY hat dieses Problem nicht:
Re: Richtige Syntax beim Kopieren
Verfasst: 13.04.2025, 13:05
von Hemingway
oh wie doof ... dass ich das nicht gecheckt hatte
das ist natürlich klar, dass ich beim Test die bereits kopierten Dateien hätte löschen müssen. So sorry!
Das löst aber leider noch nicht das Problem, die D/V-Frage automatisch zu beantworten, z.B. mit Pipe.
Da im realen Kontext die Optionen von xcopy erforderlich sind, kann ich's nicht bei copy belassen. In der CMD habe ich auch robocopy eingesetzt.
Ich werde mal über "pipe" recherchieren, komme aber wohl erst später dazu.
Vorerst vielen Dank und einen schönen Sonntag!