2

На Microsoft Windows Server 2008 (R1), 32-разрядная, у меня есть некоторые проблемы с пониманием использования, а также разница между

copy /a и copy /b

Статья Technet по copy не очень мне помогает:

copy /a →… скопировать текстовый файл ASCII, который использует символ конца файла (то есть CTRL+Z), чтобы указать конец файла. … Эффект /a зависит от его положения в строке командной строки. Когда /a следует за источником, copy обрабатывает файл как файл ASCII и копирует данные, которые предшествуют первому символу конца файла.

copy /b указывает интерпретатору команды прочитать количество байтов, указанное размером файла в каталоге. /b является значением по умолчанию для копирования, если копирование не объединяет файлы. … Эффект /b зависит от его положения в строке командной строки. Когда /b следует за Source, copy копирует весь файл, включая любой символ конца файла. → источник

Это довольно смущает меня , так как я думал, что copy просто клонирует файл в другое место назначения.

Вопрос: Фактический пример, где copy /a copy /b будет иметь значение, очень сильно помог бы мне понять разницу.

2 ответа2

1

Нет. Копия - это исполняемая функция записи. Я думаю, что это поведение схожесть с MS-DOS. Например, вы можете написать свой собственный файл без использования редактора в качестве редактора. Например, чтобы создать файл:

copy:con myfile.txt
Hello world!
This is other line
^Z

В приведенном выше примере ^ Z является знаком для «CONTROL +Z», что означает: "КОНЕЦ ФАЙЛА".

Теперь по вашему вопросу: когда вы используете первое утверждение, вы имеете в виду нечто подобное. Вы находитесь в режиме копирования-добавления "ASCII". Вторая версия - "БИНАРНАЯ", хорошо известная всем.

Если мой ответ кажется немного темным, пожалуйста, прокомментируйте, и я буду рад его обновить :)

1

Я бы просто избегал COPY/A

Я ожидаю, что это скопирует информацию до первого символа EOF (Ctrl-Z), а затем урежет файл после этого. Так что, если у вас есть файл с надписью «HELLO ^ M ^ ZGREETINGS», то результат просто скажет «HELLO ^ M».

Это может также сделать некоторые интересные вещи с текстовыми файлами Unix, например преобразовать их в формат MS-DOS ASCII. Такие вещи считались полезными в первые дни DOS, когда люди были более склонны переводить текстовые файлы в собственный формат своей операционной системы. Это, вероятно, рассматривалось как функция, которая действительно помогла улучшить совместимость.

Теоретически это могут быть очень желательные вещи. Но, вероятно, не в большинстве случаев. В большинстве случаев вам нужна точная копия битов исходного файла. Так что копия /B желательна. Copy /B также обычно используется по умолчанию. (Это файл по умолчанию для файлов; он не может быть по умолчанию, если вы не укажете файл в качестве источника.)

Например, по крайней мере с некоторой версией DOS я использовал Copy/B следующим образом:

Копировать /B config1.txt+config2.txt config3.txt

Я считаю, что без /B, указание нескольких имен файлов может привести к тому, что источник будет рассматриваться как недвоичный источник. Тем не менее, я вспоминаю, что выяснил позже, что точное поведение может варьироваться в зависимости от того, какую командную оболочку я использую. Это может означать разные версии операционной системы или, возможно, использование оболочки, подобной 4DOS от JP Software, которую я регулярно использую.

Кстати, такая же вещь, как и способность FTP передавать файлы в режиме ASCII или в двоичном режиме. Возможно, полезно в теории, но, вероятно, на самом деле вызывает больше путаницы, чем помощи. Это еще более верно для CMD COPY/A, чем для FTP.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .