web-dev-qa-db-ja.com

出力名が指定されている場合、WildCardsはCopyの出力ファイルを破損します

copyは、ソースでワイルドカード(*?)が使用され、出力名が指定されている場合、ほぼ空の(1K)ファイルを作成します。

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

一部のファイルタイプ(.txt .rtf)で機能します
copy /D /V *?ample.txt %TEMP%\example.txt

興味深いことに、ソースと宛先の両方のワイルドカードでこれが修正されます。
copy "*xample.pdf" "%TEMP%/*xample.pdf"
しかし、ファイル名を台無しにすると、次のようになります:le.pdfxample.pdf

これはバグですか、それとも悪い構文ですか?私は困惑しています。

私はWindows7x86_64を使用しています
関連する質問
DOS COPYコマンドでwildardを使用すると、宛先ファイルが破損します
Windowsでワイルドカードを使用してファイルを追加せずにコピーするにはどうすればよいですか?

2
Vencen

これは(誤用された)機能だと思います。
My Windown 10 help copy言う:

ファイルを追加するには、宛先に1つのファイルを指定し、ソースに複数のファイルを指定します(ワイルドカードまたはfile1 + file2 + file3形式を使用)。

ファイル形式が単純に連結されたソースファイルをサポートしていない場合は、これを覚えておくのはユーザーの責任です。

また バリの答え あなたの最初のリンクへはあなたの質問に完全に答えます。

名前が不明なソースファイルが1つしかない場合の別の回避策は、次のとおりです。

for %A in (*?ample.png) Do copy "%A"  "%homepath%/example.png"
1
LotPings

copyはiファイルのタイプを知っている必要があります: "ASCII text"/Aまたは「バイナリファイル」/B

バイナリファイル/Bは、ファイルを結合しない限り想定されます。
ただし、ソースにワイルドカードを挿入し、ファイルを結合する出力名を指定すると、Windowsは「想定」し、「ASCIIテキスト」インタープリターを使用するため、1Kの空のファイルを作成します。

したがって、/Bパラメータ(バイナリファイルを示します)
出力名が指定されたソースでワイルドカードを使用する場合は、使用する必要があります。
すべての非「ASCIIテキスト」ファイル。

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

それをバグ、愚かなマイクロソフトの機能と呼んでください、しかしそれはそれがそうである方法です。

ソース

1
Vencen

ワイルドカードの使用に関する1つの問題...(潜在的に)多くのファイルを1つのターゲットにコピーし、この貧弱なファイルを何度も無用に上書きしています:)。しかし、それはこの興味深い「機能」を引き出しました。 DOSフロッピーを取り出して、バグがそれほど古いかどうかを確認したいと思います。

DIRでこの興味深いバグを見つけて、おめでとうございます!コピーされたファイルは破損してしまいます。これは非常に一貫性があり、/ D/Vスイッチに依存せず、同じファイルを何度も上書きする場合にのみ発生します。 xcopyを使用している場合、このバグは発生しません。これは、すべてのWindowsユーザーにとって朗報です。

1
Michaël Roy