WildCards повреждает выходной файл Копии, когда указано имя вывода

410
Vencen

copy создать почти пустой (1 КБ) файл, когда в источнике используется подстановочный знак (*?) и указывается имя вывода.

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

Это ошибка или плохой синтаксис ? я в тупике.

я нахожусь на Windows 7 x86_64
вопросы, связанные с
использованием подстановочного знака с командой DOS COPY повреждает файл назначения
Как мне скопировать файл с подстановочным знаком в Windows без добавления?

2

3 ответа на вопрос

1
LotPings

Я думаю, что это (неправильно) используемая функция.
Мой Windown 10 help copyговорит:

Чтобы добавить файлы, укажите один файл для места назначения, но несколько файлов для источника (используя подстановочные знаки или формат file1 + file2 + file3).

Если формат файла не поддерживает просто сцепленные исходные файлы, пользователь должен помнить об этом.

Также ответ Бали на вашу первую ссылку полностью отвечает на ваш вопрос.

Другой обходной путь, если существует только один исходный файл с неясным именем:

for %A in (*?ample.png) Do copy "%A" "%homepath%/example.png" 
Я не согласен с последним предложением. «*» Означает _0 или более_ символов; `*?` означает _one или more_ символы, что является существенным и полезным различием. Aganju 6 лет назад 0
`Copy` не должен предполагать, что это« добавление »файлов в этом случае, он должен проверить &, если задано несколько двоичных файлов, завершиться с _error: Не удалось объединить двоичные файлы_. Microsoft, так заблуждается Vencen 6 лет назад 0
1
Vencen

copyдолжен знать тип файла: «ASCII текст» /Aили «Двоичный файл»/B

Двоичный файл /Bпредполагается, если вы не объединяете файлы.
но Windows «предполагает», когда вы помещаете подстановочные знаки в источник и указываете выходное имя, которое вы комбинируете, и используете интерпретатор «ASCII текст», поэтому создаете пустой файл размером 1 КБ.

Таким образом, /B параметр (указывает на двоичный файл)
должен использоваться при использовании подстановочных знаков в источнике с указанным именем вывода
во всех файлах, не относящихся к тексту ASCII.

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

Назовите это «Ошибка», глупая функция Microsoft, но так оно и есть.

Источник

/ B давно изменилось на «скопировать ссылку, а не ее цель». / B потерял смысл в DOS 6 и снова появился в его новой форме в Windows 95, если моя память верна. Вышеуказанная ошибка присутствует в Windows 7 / x86. Michaël Roy 6 лет назад 0
Но мне пришлось попробовать переключатель / B после прочтения вашего комментария. Вы нашли источник ошибки! Если бы только у нас был исходный код ... Похоже, команда MS не очень хороша в очистке кода. Я удивляюсь, сколько из этих камней все еще скрывается вокруг. Michaël Roy 6 лет назад 0
1
Michaël Roy

Одна проблема с использованием символов подстановки ... Вы копируете (потенциально) много файлов в одну цель, перезаписывая этот плохой файл много раз совершенно бесполезно :). Но это действительно выявило эту интересную «особенность». Я испытываю желание принести мои дискеты DOS, чтобы проверить, старая ли ошибка.

Поздравляю вас с обнаружением этой интересной ошибки в DIR! Скопированный файл в конечном итоге поврежден. Это очень согласованно, не зависит от параметров / D / V и происходит только при перезаписи одного и того же файла снова и снова. Ошибка не появляется при использовании xcopy, что является хорошей новостью для всех пользователей Windows.

"_Один вопрос с использованием символов подстановки _" ....... Согласен, но это не проблема [здесь] (https://superuser.com/a/1217774/680625), и я не согласен с "... происходит при перезаписи одного и того же файла .... "происходит ** первый раз **, каждый раз. & Спасибо! Vencen 6 лет назад 0
Я играл с ним в течение добрых 20 минут этим утром .... использование карт Willdcard для ввода и вывода работает как талисман под win7 / x86. И справка для / B - «скопировать ссылку как ссылку, а не как ее цель» в обычном окне cmd, но не так, как я проверял в сеансе VS2008 cmd. Michaël Roy 6 лет назад 0
Извините, я никогда не привыкну к поведению ключа возврата на этом сайте. Michaël Roy 6 лет назад 0
Кажется, есть еще много вещей, которые нужно узнать о копировании ... Интересно, будут ли новые VS2017 SDK также иметь свою собственную версию, продолжение следует ... Michaël Roy 6 лет назад 0
Эта ошибка `copy` думает, что" двоичные файлы "- это текстовые файлы ASCII, когда в источнике используются символы подстановки, и вы указываете имя назначения, вот и все! Vencen 6 лет назад 0
«И справка для / B -« скопировать ссылку как ссылку, а не как ее цель »... это только вы, везде, где бы это ни было ** / b **: обозначает двоичный файл. Vencen 6 лет назад 0