XCOPY не может прочитать / исключить файл

Я пытаюсь написать командный файл сценария сборки для мода Unreal Tournament 2004, для которого я хочу опубликовать исходный код. Этот скрипт содержит вызов XCOPY с параметром /EXCLUDE следующим образом:

XCOPY "%ProjectFolder%*" "%BuildFolder%" /S /C /Y /EXCLUDE:"%ProjectFolder%Build\CopyExcludes.cfg"

По какой-то причине эта команда говорит мне, что она не может прочитать файл CopyExclude.cfg. Как я могу это исправить?

В пакетном файле%ProjectFolder% является базовой папкой исходных файлов, включая обратную косую черту. %BuildFolder% - это подпапка в папке UT2004, где компилятор ожидает, что файлы будут. Я запустил командный файл с ECHO ON чтобы увидеть расширенные переменные:

C:\UT2004>XCOPY "C:\UT2004\EvenMatch\*" "C:\UT2004\EvenMatchV1" /S /C /Y /EXCLUD
E:"C:\UT2004\EvenMatch\Build\CopyExcludes.cfg"
Datei "C:\UT2004\EvenMatch\Build\CopyExcludes.cfg" kann nicht gelesen werden.

0 Datei(en) kopiert

(Не берите в голову очевидный разрыв строки в команде, это просто перенос текста в окне CMD после 80 символов.)

Странная часть, я могу поставить команду type "%ProjectFolder%Build\CopyExcludes.cfg" непосредственно перед и после команды XCOPY, и она правильно показывает содержимое файла в обеих позициях в командном файле:

C:\UT2004>type "C:\UT2004\EvenMatch\Build\CopyExcludes.cfg"
.svn
.bak
.git
.cfg
#
~

C:\UT2004>XCOPY "C:\UT2004\EvenMatch\*" "C:\UT2004\EvenMatchV1" /S /C /Y /EXCLUD
E:"C:\UT2004\EvenMatch\Build\CopyExcludes.cfg"
Datei "C:\UT2004\EvenMatch\Build\CopyExcludes.cfg" kann nicht gelesen werden.

0 Datei(en) kopiert

C:\UT2004>type "C:\UT2004\EvenMatch\Build\CopyExcludes.cfg"
.svn
.bak
.git
.cfg
#
~

Целевая папка для XCOPY существует и пуста. Обе папки не имеют особых ограничений доступа, по крайней мере, тех, о которых я знаю. Функция поиска дескриптора Process Explorer ничего не вызывает при поиске "CopyExclude", то есть файл, похоже, не заблокирован какой-либо другой программой. Я также уже пытался копировать другие подпапки по отдельности, но XCOPY все еще не может прочитать файл. Согласно Notepad++ все строки в файле заканчиваются CRLF.

Я использую Windows 7 Pro x64, но, надеюсь, смогу заставить это работать на любой версии или редакции Windows.

1 ответ

Решение

Командная строка DOS и отдельные команды обрабатывают кавычки по-разному. Удалите двойные кавычки вокруг имени файла исключения, и вы должны быть установлены!

Для имен файлов с пробелами вы можете использовать 8-символьную версию, например, PROGRA~1 за Program Files,

Другие вопросы по тегам