WildCards повреждает выходной файл Копии, когда указано имя вывода
460
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
Я думаю, что это (неправильно) используемая функция. Мой Windown 10 help copyговорит:
Чтобы добавить файлы, укажите один файл для места назначения, но несколько файлов для источника (используя подстановочные знаки или формат file1 + file2 + file3).
Если формат файла не поддерживает просто сцепленные исходные файлы, пользователь должен помнить об этом.
Также ответ Бали на вашу первую ссылку полностью отвечает на ваш вопрос.
Другой обходной путь, если существует только один исходный файл с неясным именем:
for %A in (*?ample.png) Do copy "%A" "%homepath%/example.png"
Я не согласен с последним предложением. «*» Означает _0 или более_ символов; `*?` означает _one или more_ символы, что является существенным и полезным различием.
Aganju 7 лет назад
0
`Copy` не должен предполагать, что это« добавление »файлов в этом случае, он должен проверить &, если задано несколько двоичных файлов, завершиться с _error: Не удалось объединить двоичные файлы_. Microsoft, так заблуждается
Vencen 7 лет назад
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 7 лет назад
0
Но мне пришлось попробовать переключатель / B после прочтения вашего комментария. Вы нашли источник ошибки! Если бы только у нас был исходный код ... Похоже, команда MS не очень хороша в очистке кода. Я удивляюсь, сколько из этих камней все еще скрывается вокруг.
Michaël Roy 7 лет назад
0
1
Michaël Roy
Одна проблема с использованием символов подстановки ... Вы копируете (потенциально) много файлов в одну цель, перезаписывая этот плохой файл много раз совершенно бесполезно :). Но это действительно выявило эту интересную «особенность». Я испытываю желание принести мои дискеты DOS, чтобы проверить, старая ли ошибка.
Поздравляю вас с обнаружением этой интересной ошибки в DIR! Скопированный файл в конечном итоге поврежден. Это очень согласованно, не зависит от параметров / D / V и происходит только при перезаписи одного и того же файла снова и снова. Ошибка не появляется при использовании xcopy, что является хорошей новостью для всех пользователей Windows.
"_Один вопрос с использованием символов подстановки _" ....... Согласен, но это не проблема [здесь] (https://superuser.com/a/1217774/680625), и я не согласен с "... происходит при перезаписи одного и того же файла .... "происходит ** первый раз **, каждый раз. & Спасибо!
Vencen 7 лет назад
0
Я играл с ним в течение добрых 20 минут этим утром .... использование карт Willdcard для ввода и вывода работает как талисман под win7 / x86. И справка для / B - «скопировать ссылку как ссылку, а не как ее цель» в обычном окне cmd, но не так, как я проверял в сеансе VS2008 cmd.
Michaël Roy 7 лет назад
0
Извините, я никогда не привыкну к поведению ключа возврата на этом сайте.
Michaël Roy 7 лет назад
0
Кажется, есть еще много вещей, которые нужно узнать о копировании ... Интересно, будут ли новые VS2017 SDK также иметь свою собственную версию, продолжение следует ...
Michaël Roy 7 лет назад
0
Эта ошибка `copy` думает, что" двоичные файлы "- это текстовые файлы ASCII, когда в источнике используются символы подстановки, и вы указываете имя назначения, вот и все!
Vencen 7 лет назад
0
«И справка для / B -« скопировать ссылку как ссылку, а не как ее цель »... это только вы, везде, где бы это ни было ** / b **: обозначает двоичный файл.
Vencen 7 лет назад
0