Richtige Syntax beim Kopieren

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smileys
:) ;) :smile: :lol: :hihi: :D :rofl: :muahah: :( :pff: :kopfstreichel: :ohno: :betruebt: :heulen: :kopfkratz: :duckundweg: :o :? :oops: :psst: :sauer: :-P :daumenrunter: :daumen: :dankeschoen: :thx: :dafür: :gähn:
Mehr Smileys anzeigen

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Ansicht erweitern Die letzten Beiträge des Themas: Richtige Syntax beim Kopieren

Re: Richtige Syntax beim Kopieren

von Holgi » 13.04.2025, 16:13

ah, ok funktioniert. Aber unter "automatisch" hätte ich was Anderes verstanden. Also mit Intelligenz zur Unterscheidung von Datei und Verzeichnis. Aber das ist selbstverständlich Definitionssache. Wenn man "D" vorgibt, kommt selbstverständlich "automatisch" D dabei heraus.

Re: Richtige Syntax beim Kopieren

von Hemingway » 13.04.2025, 15:06

Hab das jetzt rausgefunden. Hier meine korrekte CMD-Datei:

Code: Alles auswählen

@ECHO OFF
ECHO D | XCOPY E:\123.ext D:\ziel1.ext1 /y /q >> cmd.log
GOTO :eof
Deren Ausgabe in cmd.log (in 1 Zeile gefasst):
Ist das Ziel D:\ziel1.ext1 ein Dateiname oder ein Verzeichnisname (D = Datei, V = Verzeichnis)? D
1 Datei(en) kopiert


Ist die Zieldatei schon vorhanden, ist die Ausgabe in cmd.log:
1 Datei(en) kopiert

Der Code ECHO D | XCOPY E:\ext D:\ext /y /q >> cmd.log
führt zu
Ist das Ziel D:\ext ein Dateiname oder ein Verzeichnisname (D = Datei, V = Verzeichnis)? D
0 Datei(en) kopiert


Natürlich verhindert das "D", dass leere Verzeichnisse kopiert werden:
ECHO D | XCOPY E:\ext D:\ext\ /y /q >> cmd.log
ECHO D | XCOPY E:\ext\ D:\ext\ /y /q > cmd.log
führen beide zu
0 Datei(en) kopiert.

Wenn aber Dateien darin sind, werden sie alle kopiert.
3 Datei(en) kopiert

Danke und einen schönen Sonntag noch!

Re: Richtige Syntax beim Kopieren

von Holgi » 13.04.2025, 13:14

die D/V-Frage automatisch zu beantworten
?
Also Windows (xcopy) soll schlauer sein als du und zwischen Ordner/Dateien selbst unterscheiden können, bzw. selbst entscheiden können. So was mit AI?
Ich denke, da wirst du xcopy schon beim Befehl (der batch) Unterstützung anbieten müssen (Stichwort Backslash).

Re: Richtige Syntax beim Kopieren

von Hemingway » 13.04.2025, 13:05

oh wie doof ... dass ich das nicht gecheckt hatte :ohno:
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!

Re: Richtige Syntax beim Kopieren

von Holgi » 13.04.2025, 12:42

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:

Code: Alles auswählen

xcopy E:\123.ext D:\ziel1.ext1 /y /q
gibt's die Nachfrage, weil das Ziel noch nicht existiert.

Beim zweiten Mal:

Code: Alles auswählen

xcopy E:\123456.ext D:\ziel1.ext1 /y /q
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:

Code: Alles auswählen

copy E:\123.ext D:\ziel1.ext1

Re: Richtige Syntax beim Kopieren

von Hemingway » 13.04.2025, 10:53

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

von Blondi_2021 » 13.04.2025, 01:08

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

von Holgi » 13.04.2025, 00:05

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

von Hemingway » 12.04.2025, 23:45

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" :dankeschoen: )
Ich hab das schon ausprobiert, aber es klappt nicht.

Re: Richtige Syntax beim Kopieren

von Holgi » 12.04.2025, 17:52

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

von Blondi_2021 » 12.04.2025, 17:33

Re: Richtige Syntax beim Kopieren

von Hemingway » 12.04.2025, 17:20

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

von Holgi » 12.07.2021, 09:29

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

von wengbox » 11.07.2021, 14:54

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

von daghaedd » 10.07.2021, 18:55

Mit Copy habe ich auch versucht. Kam auch nichts raus.

Nach oben