我正在尝试为 Unreal Tournament 2004 mod 编写构建脚本批处理文件,我想发布其源代码。此脚本包含对 XCOPY 的调用,并带有 /EXCLUDE 参数,如下所示:
XCOPY "%ProjectFolder%*" "%BuildFolder%" /S /C /Y /EXCLUDE:"%ProjectFolder%Build\CopyExcludes.cfg"
由于某种原因,该命令告诉我它无法读取 CopyExcludes.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
。