Команда копирования перестала работать после объединения пакетных файлов

#batch-file

#пакетный файл

Вопрос:

Я унаследовал набор пакетных файлов. Bat1 вызвал bat2, который вызвал bat3. Bat3 создал xml, который bat2 использовал для создания html, а bat1 использовал его для создания pdf. Наконец, bat1 скопировал PDF-файл в выходной каталог.

Недавно я объединил три пакетных файла в один, и все работает точно так же, вплоть до окончательной команды копирования, которая завершается ошибкой, указывая, что 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 libsaxon9.jar; net.sf.saxon.Transform -s:%sourceFile% -xsl:conversioncompose.xsl -o:compose.xml

echo Processing source file catalog
java -cp libsaxon9.jar; -s:compose.xml -xsl:conversioncatalog.xsl -o:catalog.xml

::END OF BATCH FILE 3 

echo Processing source file to HTML
java -cp libsaxon9.jar; net.sf.saxon.Transform -s:catalog.xml -xsl:conversionhtml5.xsl -o:index.html

echo Bundling publication
mkdir %documentName%
xcopy /y "conversionwebapp*" %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%assetimg

::END OF BATCH FILE 2

echo Running AHF
AHFCmd -extlevel 4 -d %documentName%index.html -o %documentName%.pdf -f HTML -x 4 -i toolAHFAHFSettings(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% не изменилась. Я пытался использовать CALL перед командами AHFCmd и JAVA, но это не имеет никакого значения. Я попробовал dir /b /a-d непосредственно перед командой копирования, и в ней указан файл, который я хочу переместить в текущий каталог. Что я делаю не так?

Комментарии:

1. Запустите echo %documentName%.pdf %outputFile% прямо перед командой копирования, чтобы убедиться, что не только %outputFile% установлено, но %documentName% и не %outputFile% содержит пробелов. Если это произойдет, вам придется использовать двойные кавычки.

2. @SomethingDark, это сработало… Я пробовал echo %documentName%.pdf %outputFile% раньше, и в любом или нет пробелов %outputFile% %documentName% , поэтому не пробовал двойные кавычки. Но помещение двойных кавычек %outputFile% (даже если в имени файла нет пробелов) устранило проблему. Есть идеи, почему?

3. Похоже, есть и другие специальные символы, такие как , , ; , = или ) , amp; , ^ ,…

4. Откройте командную строку , запустите cmd /? и внимательно прочитайте выводимую справку от начала первой до конца последней страницы. На последней странице с последним абзацем объясняется, что имя файла (или папки) (или любая другая строка аргумента), содержащее пробел или один из этих символов amp;()[]{}^=;!' ,`~ (а также операторы перенаправления <|> для интерпретации как буквальные символы в строке аргумента), должны быть заключены в двойные кавычки. Ну, [ и ] больше не имеет особого значения.

5. @aschipfl, @Mofi, спасибо! В выходных именах файлов используется разделитель, который вызывает проблемы. Я не понимал, что это специальный символ в пакетных файлах.