在一个目录中运行命令的批处理文件

22

我想要一个批处理文件(必须放在桌面上),它可以执行以下操作:

  • 打开cmd
  • 导航到目录,例如C:\activiti-5.9\setup
  • 在目录中运行命令,例如ant demo.start (该命令会运行 activiti 服务器)

我尝试了以下方法来到达该目录,但如何运行命令"ant demo.start"

START cmd.exe /k "cd C:\activiti-5.9\setup"

感谢您的帮助。

编辑:

参考下面zb226的答案: 如果您能回答我的另一个问题,那么如何使该cmd以管理员身份运行?以下内容是否有效?

START cmd /K "runas /user:administrator & cd C:\activiti-5.9\setup & ant demo.start"

6个回答

34
使用&连接任意命令,如下所示:
command1 & command2 & command3 & ...

因此,在您的特定情况下,请将此行放入桌面上的批处理文件中:
START cmd.exe /k "cd C:\activiti-5.9\setup & ant demo.start"

您也可以使用&&来链接命令,但这将执行错误检查,如果其中一个命令失败,则执行链将中断。该行为在此处详细说明。

编辑:受到@James K评论"您可以链接命令,但它们不会产生任何效果"的启发,我进行了更多测试,并惊奇地发现,在我的原始测试中启动的程序-firefox.exe -虽然不存在于PATH环境变量的目录中,但实际上可以在我的系统上的任何地方执行(这让我非常惊讶-请参见答案底部的解释)。因此,实际上执行...

START cmd.exe /k "cd C:\progra~1\mozill~1 && firefox"

...并没有证明这个解决方案是有效的。因此,在确保它不能在我的系统上执行之后,我选择了另一个程序(nLite):

START cmd.exe /k "cd C:\progra~1\nlite && nlite"

正如我最初的回答所建议的那样,这是可行的。虽然问题中没有给出Windows版本,但是我使用的是Windows XP。


如果有人想知道为什么firefox.exe不在PATH中却可以在我的系统上任何地方执行 - 并且很可能在您的系统上也可以执行 - 这是由于一个注册表键,应用程序可以在其中注册以在任何地方都可用。有关详细信息,请参见此SU答案


你应该在发布之前进行测试。你可以链接命令,但它们不会产生任何效果。 - James K
非常感谢zb226,它在同一字符串中对我起作用,我能够运行activiti服务器。 如果您能回答我的另一个问题,那就再好不过了,那就是如何使该cmd作为管理员运行?以下方式是否有效?START cmd /K "runas /user:administrator & cd C:\activiti-5.9\setup & ant demo.start"实际上它是可以工作的,但我不知道cmd是否以管理员模式运行。 - nommyravian
这真的应该是一个单独的问题或包含在您的原始问题中,但是这里是答案:不,那不会以管理员身份运行。你已经在前面链接了 runas,但你需要将我的答案作为参数给出到 runas。为此,需要进行转义,并且 START 命令会引起麻烦(但我认为您不需要它,因为在桌面上单击批处理文件会生成一个新窗口)。长话短说,尝试这个:runas /user:administrator "cmd.exe /k \"cd C:\activiti-5.9\setup ^& ant demo.start\"" - zb226
顺便提一下,在Windows任务管理器的“进程”选项卡中,您可以随时检查运行程序的用户。 - zb226
你好,我尝试使用你的解决方案,但它没有显示实际结果(activiti没有出现),所以我稍微改了一下,现在以下内容可以正常工作。START "runas /user:administrator" cmd /K "cd C:\activiti-5.9\setup & ant demo.start" START /wait localhost:8080/activiti-explorer - nommyravian

14

对于我来说,以下是可以工作并运行activiti服务器以及在浏览器中打开explorer的方法(借助zb226的答案和评论);

START "runas /user:administrator" cmd /K "cd C:\activiti-5.9\setup & ant demo.start"

START /wait localhost:8080/activiti-explorer


12

这个问题已经五年了。我想知道为什么还没有人找到/d开关来设置工作文件夹:

start /d "c:\activiti-5.9\setup" cmd /k ant demo.start

3

CMD.EXE无法执行字符串中包含的内部命令。只有实际文件可以使用该字符串启动。

您需要实际调用一个批处理文件来完成您想要的操作。

BAT1.bat

start cmd.exe /k bat2.bat

BAT2.bat

cd C:\activiti-5.9\setup
ant demo.start

您可能想创建一个名为BAT的文件夹,并将其位置添加到路径中。 因此,如果您创建了C:\BAT,请在路径中添加C:\BAT\;。 路径位于:

    click -> Start -> right-click Computer -> Properties ->
    click -> Avanced System Settings -> Environment Variables
   select -> Path (From either list. User Variables are specific to 
                   your profile, System Variables are, duh, system-wide.)
    Click -> Edit
Press the -> the [END] or [HOME] key.
     Type -> C:\BAT\;
    Click -> OK -> OK

现在将您所有的批处理文件放置在C:\BAT中,无论当前目录如何,都可以找到它们。


你确定内部命令的那一点吗?在我的端上,使用 & 链接是完全正常的(请参见我的回答)。但如果我漏掉了什么,请详细说明,学习从来不是坏事 :) - zb226
我从未以那种方式执行过内部命令(尽管它可以以那种方式运行实际文件)。我想我可能错过了什么,但我已经在Windows 7 Ultimate、XP、2000 Server和98上尝试过了。虽然测试不是非常详尽,但结果一直如此。 - James K

1
我的命令确实是按顺序执行的。以下是我使用它的版本:
START cmd.exe /k "U: & cd U:\Design_stuff\new_lcso_website_2017 & python -m http.server"
我需要做以下操作:
  1. 切换到我的U盘
  2. CD到包含正在重新设计的网站的特定文件夹
  3. 使用http服务器模块执行python(以在浏览器中显示内容)。
如果这些命令顺序不正确,它将无法显示正确的文件。 我最初忘记了切换到“U:”,在桌面上运行批处理文件时,它在我的浏览器中创建了一个网页http://localhost:8000,显示我的桌面内容而不是我想要的文件夹。

-1

您也可以查看:

cmd /c cd /d C:\activiti-5.9\setup & ant demo.start


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接