批处理以调用Java主类

批处理以调用Java主类,java,batch-file,Java,Batch File,下面的批处理文件出现错误 cls set classpath=C:\Program^ Files\salesforce.com\Data^ Loader\dataloader-29.0.0-uber.jar set mainclass=com.salesforce.dataloader.process.ProcessRunner set confdir=C:\Program^ Files\salesforce.com\Data^ Loader\Bkp\ if [%1]==[] goto er

下面的批处理文件出现错误

cls
set classpath=C:\Program^ Files\salesforce.com\Data^ Loader\dataloader-29.0.0-uber.jar
set mainclass=com.salesforce.dataloader.process.ProcessRunner
set confdir=C:\Program^ Files\salesforce.com\Data^ Loader\Bkp\

if [%1]==[]  goto error

call java -cp %classpath% -Dsalesforce.config.dir=%confdir% %mainclass% process.name=Product_vod__c sfdc.extractionSOQL="SELECT 

Id,name FROM Product_vod__c where Id in %1"
goto end

:error
echo Error: missing date argument (must be in 'yyyy-mm-ddThh:mm:ssZ' format)
:end
错误

Could not find or load main class Files\salesforce.com\Data
有人能告诉我这个问题吗?
谢谢

在类路径中的某个地方有一个未被替换的
程序文件
,它的空格打断了类路径参数:类路径在
程序
处停止,java将以下
文件\salesforce.com\Data
解析为它应该执行的类


您应该用双引号将包含空格的类路径片段括起来。

但是在“程序文件”中有carot符号来转义空格。你是说carot不工作了?你是说反斜杠(
\
)?因为a既不能在批处理中也不能在java路径中工作。无论如何,您必须对这两种语言进行转义:
\
会被java(和unix)理解,但是batch不会理解它(因为反斜杠是路径分隔符),并且会为java提供两个不同的参数。实际上,您只需对batch进行转义,java不会介意在其类路径中有空格,因为它会将其拆分成
(在windows下)或
(在unix下)。无论如何,我所说的仍然有效,在包含空格的路径片段周围使用双引号(或者在整个文件路径周围,或者仅在包含空格的目录中)@SFDC\u Learner我刚才看到的插入符号确实可以用于批量转义字符,我不知道为什么它在您的情况下不起作用。@SFDC\u Learner,
^
符号有效,但是在一个不需要的点上:变量赋值(
set
);只要您像
%classpath%
那样展开变量,就会再次出现空格并打断命令行;唯一的解决方案是使用双引号,如
“%classpath%”
。。。