如何让从BAT文件运行的程序在自己的目录中运行?

问题描述:

我写了一个简单的.BAT脚本,我将它安排在windows服务器上进行备份。问题是它运行一个应用程序,但输出不在它所在的文件夹中,它在某处(我不知道在哪里)。输出是一个日志文件和一个备份文件。如何让从BAT文件运行的程序在自己的目录中运行?

这里的脚本:

"%JAVA_HOME%"\bin\java -jar "%~dp0jwbackup.jar" 

你有两个选择。首先,您可以按照指定可执行文件的相同方式为计划任务设置当前目录。当然,这是一个额外的事情,你需要担心,如果位置改变。

另一种方式已显示在脚本中。您的jar文件规范中的%~dp0是参数零(批处理文件名)的驱动器和路径,因此它会在与批处理文件相同的目录中查找jar文件。

因此你可以把:

cd /d %~dp0 

到您的命令文件试图运行Java程序之前,这将是在正确的目录,即使你决定把它移到别的地方去。

你可以只cd到运行的实际应用之前的文件夹:

cd\ 
cd "%JAVA_HOME%"\bin 
java -jar "%~dp0jwbackup.jar" 
+0

您可能不希望处于Java bin目录中,而是我认为要求与批处理文件位于同一目录中。但理论是正确的,你只需要改变'cd'命令来选择不同的位置。 – paxdiablo

+0

我对Java一无所知,所以我不知道将输出文件放在'bin'目录是否是一个好主意。他在他的问题中没有清楚地说明他是否希望在批处理文件目录或bin目录中输出(我理解后者)。如果他想要批处理文件目录,那么你的答案是更好的答案。 –

添加cd /d %~dp0将currect工作目录设置为.bat文件的位置。

+0

我说对了,过去不需要这个命令吗? – pluton

+1

@pluton:[看起来像](http://stackoverflow.com/a/665682/819417)“开始”日程安排功能已损坏。 –

+0

错位的自动运行出现问题。 – pluton