Я использовал задал этот вопрос и получил ответ, который, казалось, не может быть правильным, но я попробовал, и это сработало!

Как мог вариант /f , который согласно документации :

Отображает полные имена исходного и конечного файлов при копировании

возможно, что в файле EXCLUDE будут распознаваться пробелы ?! Этот эффект кажется совершенно не связанным с целью /f !

2 ответа2

1

Похоже, что /f влияет не только на отображение, но и на данные имени файла, которые используются для сопоставления со строками исключения. Возможно, вы слишком строги в своей интерпретации "показа" :-).

Но, если серьезно, имейте в виду, что авторы документации не всегда могут предвидеть, как различные варианты могут взаимодействовать при использовании их инструмента. Другими словами, это поведение не может быть преднамеренным, но, тем не менее, оно работает.

1

Я был тем, кто дал вам более ранний ответ, и вы думаете об этом неправильно. Флаг /f влияет не на то, как обрабатывается пробел, а на то, как обрабатываются пути.

Если вы запустите xcopy без флага /f, вы увидите, что он работает с файлами относительно рабочего каталога или заданных вами путей. Очевидно, это также используется внутренней логикой xcopy, поэтому при запуске по умолчанию он может фильтровать только те части пути, которые вы указали в команде копирования.

Когда вы добавите флаг /f, xcopy отобразит полный путь к файлу независимо от того, как вы вызвали копию. Поскольку это, похоже, влияет на внутреннюю логику, это также позволяет фильтровать по полному пути файла, а не только по относительным путям.

Это не объясняется в текущей документации по xcopy, что наводит на мысль, что это влияет только на отображение, а не на внутреннюю логику.

Вы можете проверить это для себя со следующим.

Создайте папку c:\unicorns и папку c:\ponys. В папке unicorns создайте три файла: test1.txt, test2.txt и exclude.txt. Отредактируйте файл exclude.txt и вставьте следующее

test1.txt
c:\unicorns\test2.txt

Перейдите в c:\unicorns и выполните команду

xcopy *.txt ..\ponys /exclude:exclude.txt

Вы увидите, что он копирует test2.txt и exclude.txt. Теперь добавьте флаг /f следующим образом.

xcopy /f *.txt ..\ponys /exclude:exclude.txt

Вы заметите, что на этот раз он копирует только exclude.txt.

В этом примере наш рабочий каталог был c:\unicorns, и поэтому отображаемые имена содержали только имена файлов.

Мы можем продолжить с этим и показать, что произойдет, если вы используете абсолютные пути. Используйте ту же настройку каталогов, что и раньше, и выполните команду

xcopy c:\unicorns\*.txt c:\ponys /exclude:c:\unicorns\exclude.txt

Теперь вы можете видеть, что единственный скопированный файл - это exclude.txt. Задавая абсолютные пути в команде, они используются во внутренней логике и могут быть отфильтрованы.

Если вы попробуете это с флагом /f, вы заметите, что они работают одинаково

xcopy /f c:\unicorns\*.txt c:\ponys /exclude:c:\unicorns\exclude.txt

Я надеюсь, что это дает четкое объяснение того, как это работает в настоящее время.

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