Я пытаюсь использовать xcopy /exclude:exclude.txt
и один из путей в exclude.txt
содержит пробел, и он не работает. Есть ли обходной путь для этого?
3 ответа
Прочитайте соответствующие разделы справки xcopy
/EXCLUDE:file1[+file2][+file3]...
Specifies a list of files containing strings. Each string
should be in a separate line in the files. When any of the
strings match any part of the absolute path of the file to be
copied, that file will be excluded from being copied. For
example, specifying a string like \obj\ or .obj will exclude
all files underneath the directory obj or all files with the
.obj extension respectively.
Мы видим, что опция exclude работает не с путями или именами файлов, а с фильтрами. Чтобы проиллюстрировать это, я попытаюсь привести короткий пример. Изобразите это exclude.txt
Unicorns
Dolphins
Это отфильтрует любой файл, в котором есть единороги или дельфины в любом месте его имени. например, Dolphins.txt будет отфильтрован, но Ponys.txt будет в порядке.
Чтобы вернуться к вашей проблеме. Причина, по которой ваш фильтр не соответствует, не из-за пробела в пути. По умолчанию xcopy будет заботиться только о имени файла, а не о полном пути, любой фильтр, содержащий полный путь, не будет совпадать, и файл будет скопирован.
Вы можете изменить это поведение xcopy, указав в своей команде флаг /f. Это должно решить проблему, которую вы видите.
Отредактируйте exclude.txt
и поместите двойные кавычки вокруг пути, который содержит пробел.
Одна вещь, которую я сделал в этой ситуации, - это использование "короткого имени" (старого стиля DOS 8.3 name). Вы можете получить это имя с помощью dir /x
. Каждая версия Windows начиная с Win 95, которая допускает длинные имена файлов, также допускает это альтернативное имя 8.3 для files /dirs.