WildCards beschädigt die Ausgabedatei von Copy, wenn ein Ausgabename angegeben wird

472
Vencen

copy create ist eine fast leere (1K) Datei, wenn in der Quelle ein Platzhalter (*?) verwendet wird und ein Ausgabename angegeben wird.

copy /D /V *?ample.png %homepath%/example.png

es funktioniert für einige Dateitypen (.txt .rtf)
copy /D /V *?ample.txt %TEMP%\example.txt

Interessanterweise behebt die Platzhalterung in Quelle und Ziel dies,
copy "*xample.pdf" "%TEMP%/*xample.pdf"
aber der Dateiname wird durcheinander gebracht, es kommt dazu: le.pdfxample.pdf

Ist das ein Fehler oder eine schlechte Syntax ? Ich bin verblüfft.

Ich bin auf Windows 7 x86_64
verwandte Fragen
Verwenden von Wildard mit DOS Der Befehl COPY beschädigt die Zieldatei.
Wie kann ich eine Datei mit einem Platzhalter in Windows kopieren, ohne anzufügen?

2

3 Antworten auf die Frage

1
LotPings

Ich denke es ist ein (falsch) benutztes Feature.
Mein Windown 10 help copysagt:

Um Dateien anzuhängen, geben Sie eine einzige Datei als Ziel an, aber mehrere Dateien als Quelle (unter Verwendung von Platzhaltern oder File1 + File2 + File3-Format).

Wenn das Dateiformat nicht einfach verkettete Quelldateien unterstützt, muss der Benutzer dies berücksichtigen.

Auch die Antwort von Bali auf Ihren ersten Link beantwortet Ihre Frage vollständig.

Eine andere Problemumgehung, wenn nur eine Quelldatei mit unklarem Namen vorhanden ist, lautet:

for %A in (*?ample.png) Do copy "%A" "%homepath%/example.png" 
Ich stimme dem letzten Satz nicht zu. Ein "*" bedeutet _0 oder mehr Zeichen; "*" bedeutet _ein oder mehrere Zeichen, was ein bedeutender und nützlicher Unterschied ist. Aganju vor 6 Jahren 0
`Copy` sollte in diesem Fall nicht davon ausgehen, dass es sich um" anhängende "Dateien handelt. Es sollte überprüft werden, ob mehrere Binärdateien angegeben wurden, und es sollte ein _error-Befehl vorhanden sein: Kann keine verketteten Binärdateien_. Microsoft, so fehlgeleitet Vencen vor 6 Jahren 0
1
Vencen

copymuss den Dateityp kennen: "ASCII-Text" /Aoder "Binärdatei"/B

Eine binäre Datei /Bwird angenommen, es sei denn, Sie kombinieren Dateien.
Windows "nimmt jedoch an", wenn Sie Platzhalterzeichen in die Quelle einfügen und einen Ausgabennamen angeben, in dem Sie Dateien kombinieren, und den Interpreter "ASCII-Text" verwenden, um eine leere 1K-Datei zu erstellen.

Daher muss der /B Parameter (Gibt eine Binärdatei an)
verwendet werden, wenn in der Quelle Platzhalter mit einem angegebenen Ausgabennamen
für alle Dateien verwendet werden, die keine ASCII-Textdateien sind.

copy /B /D /V *?ample.png %homepath%/example.png

Nennen Sie es einen Bug, eine dumme Microsoft-Funktion, aber so ist es.

Quelle

/ B hat sich längst geändert und bedeutet "Kopiere den Link und nicht sein Ziel". / B verlor die Bedeutung in DOS 6 und erschien in seiner neuen Form in Windows 95 wieder, wenn mein Speicher korrekt ist. Der obige Fehler ist in Windows 7 / x86 vorhanden. Michaël Roy vor 6 Jahren 0
Aber nachdem ich Ihren Kommentar gelesen hatte, musste ich die Option / B ausprobieren. Sie haben die Quelle des Fehlers gefunden! Wenn wir nur den Quellcode hätten ... Anscheinend ist das MS-Team nicht sehr gut darin, den Code aufzuräumen. Ich frage mich, wie viele dieser Edelsteine ​​noch immer herumlungern. Michaël Roy vor 6 Jahren 0
1
Michaël Roy

Ein Problem bei der Verwendung von Platzhaltern ... Sie kopieren (möglicherweise) viele Dateien in ein einziges Ziel und überschreiben diese arme Datei oft nutzlos :). Aber es hat dieses interessante "Feature" herausgebracht. Ich bin versucht, meine DOS-Disketten herauszuholen, um zu überprüfen, ob der Fehler so alt ist.

Ich gratuliere Ihnen zu diesem interessanten Fehler in DIR! Die kopierte Datei wurde beschädigt. Es ist sehr konsistent, hängt nicht von den / D / V-Schaltern ab und tritt nur auf, wenn dieselbe Datei immer wieder überschrieben wird. Bei der Verwendung von xcopy wird der Fehler nicht angezeigt. Dies ist eine gute Nachricht für alle Windows-Benutzer.

"_Ein Problem mit Ihrer Verwendung von Platzhaltern _" ....... Einverstanden, aber das ist nicht das Problem [hier] (https://superuser.com/a/1217774/680625). & Ich bin nicht einverstanden mit "... passiert, wenn dieselbe Datei überschrieben wird .... "das erste Mal **, jedes Mal. & Vielen Dank! Vencen vor 6 Jahren 0
Ich habe heute morgen gut 20 Minuten damit gespielt. Willdcards für Input und Output funktionieren wie ein Zauber unter win7 / x86. Und die Hilfe für / B ist "Link als Link kopieren und nicht als Ziel" in einem regulären Cmd-Fenster, aber nicht, da ich gerade in einer VS2008-Cmd-Sitzung überprüft habe. Michaël Roy vor 6 Jahren 0
Entschuldigung, ich werde mich nie an das Verhalten der Rückkehrschlüssel auf dieser Site gewöhnen. Michaël Roy vor 6 Jahren 0
Es gibt wohl noch einiges zu entdecken über die Kopie ... Ich frage mich, ob die neuen VS2017-SDKs auch eine eigene Version bereitstellen, Fortsetzung folgt ... Michaël Roy vor 6 Jahren 0
Der Fehler war "copy". "Binäre Dateien" sind "ASCII-Text" -Dateien, wenn in der Quelle Platzhalter verwendet werden und Sie einen Zielnamen angeben. Das ist es! Vencen vor 6 Jahren 0
"Und die Hilfe für / B ist" Link als Link kopieren und nicht als Ziel "... es sind nur Sie, überall sonst ** / b **: Zeigt eine Binärdatei an. Vencen vor 6 Jahren 0