Batch file 合并批处理文件后,“复制”命令已停止工作

Batch file 合并批处理文件后,“复制”命令已停止工作,batch-file,Batch File,我继承了一组批处理文件。 Bat1称为bat2,bat2称为bat3。 Bat3创建了一个xml,bat2用它创建html,bat1用它创建pdf。 最后,bat1将pdf复制到输出目录 我最近将三个批处理文件合并为一个批处理文件,直到最后一个copy命令,所有的工作方式都完全相同,该命令无法说明无法找到pdf @echo off pushd %~dp0 set sourceFile=%1 set xslt=%2 set outputFile=%3 for %%i in (%sourceF

我继承了一组批处理文件。 Bat1称为bat2,bat2称为bat3。 Bat3创建了一个xml,bat2用它创建html,bat1用它创建pdf。 最后,bat1将pdf复制到输出目录

我最近将三个批处理文件合并为一个批处理文件,直到最后一个copy命令,所有的工作方式都完全相同,该命令无法说明无法找到pdf

@echo off

pushd %~dp0

set sourceFile=%1
set xslt=%2
set outputFile=%3

for %%i in (%sourceFile%) do (
    set documentName=%%~ni
)

::BATCH FILE 2 CALLED
::BATCH FILE 3 CALLED

echo Processing source file compose
java -cp lib\saxon9.jar; net.sf.saxon.Transform -s:%sourceFile% -xsl:conversion\compose.xsl -o:compose.xml

echo Processing source file catalog
java -cp lib\saxon9.jar; -s:compose.xml -xsl:conversion\catalog.xsl -o:catalog.xml

::END OF BATCH FILE 3 

echo Processing source file to HTML
java -cp lib\saxon9.jar; net.sf.saxon.Transform -s:catalog.xml -xsl:conversion\html5.xsl -o:index.html

echo Bundling publication
mkdir %documentName%
xcopy /y "conversion\webapp\*" %documentName%\ /o /x /e /h /k 
move index.html %documentName%\
copy source graphics into web application img res dir
for %%f in ("*.jpg" "*.png" "*.gif" "*.svg" "*.psd" "*.ai" "*.pdf") do copy "%%f" %documentName%\asset\img\

::END OF BATCH FILE 2

echo Running AHF
AHFCmd -extlevel 4 -d %documentName%\index.html -o %documentName%.pdf -f HTML -x 4 -i tool\AHF\AHFSettings(x64).xml -stdout

::EVERYTHING WORKS FINE TO HERE; %documentName%.pdf is created just as it was previously. 

echo Moving %documentName%.pdf
copy %documentName%.pdf %outputFile%    ::Error - The system cannot find the file specified.
popd

copy%documentName%.pdf%outputFile%
没有更改。我曾尝试在AHFCmd和JAVA命令前面使用CALL,但这并没有什么区别。就在copy命令之前,我尝试了
dir/b/a-d
,它列出了我要在当前目录中移动的文件。我做错了什么?

在copy命令之前运行
echo%documentName%.pdf%outputFile%
,以确保不仅设置了
%outputFile%
,而且
%documentName%
%outputFile%
都不包含空格。如果他们中的任何一个这样做了,你将不得不使用双引号。@somethingsdark,这是有效的。。。我以前尝试过
echo%documentName%.pdf%outputFile%
,但是
%outputFile%
%documentName%
中都没有空格,所以没有尝试双引号。但是在
%outputFile%
周围加上双引号(即使文件名中没有空格)解决了这个问题。知道为什么吗?看来还有其他特殊字符,比如
=
&
^
,…打开,运行
cmd/?
,从第一页的顶部到最后一页的底部仔细阅读输出帮助。最后一页的最后一段解释了包含空格或其中一个字符的文件(或文件夹)名(或任何其他参数字符串)
&()[]{}^=;!'+`~(以及用于解释为参数字符串中的文字字符的重定向运算符
)必须用双引号括起来。嗯,
[
]
已经没有什么特别的意义了。@aschipfl,@Mofi,谢谢!输出文件名中有一个
+
用作分隔符,这导致了问题。我没有意识到它是批处理文件中的一个特殊字符。