6

Я пытаюсь написать командный файл сценария сборки для мода 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 ответ1

8

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

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

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