2016-09-06 183 views
1

为避免重复执行任务,我建立了一个批处理文件(在WINDOWS 10中)。它将几个CMD PROMPT打开到特定目录并启动命令。批处理窗口命令写入提示符但不执行

对于一种情况,我希望打开CMD PROMPT,转到特定目录并在PROMPT中设置COMMAND而不启动它。然后,我只需点击ENTER即可随时启动该命令。

这里是我的代码:

setlocal ENABLEEXTENSIONS 
set CordovaProjPath="C:\MyPath\" 
start cmd /k "cd /d %CordovaProjPath% && cordova build android" 

有了这个代码,它会启动命令 “科尔多瓦构建Android”。

如果我start cmd /k "cd /d %JCACordovaProjPath%代替start cmd /k "cd /d %JCACordovaProjPath% && cordova build android"去它给了我与提示:“C:\ mypath中>”,我想这样写:“科尔多瓦构建Android”背后,而无需启动命令。

任何想法?

回答

1

为了提供可重复执行(如在评论中提到)您可以将相关命令放在一个带有“退出”选项的循环中:

@Echo Off 
    setlocal 
    Set "CordovaProjPath=C:\MyPath" 
    Set "CommandToRun=cordova build android" 
:loop 
    Cd /D %CordovaProjPath% 
    Echo %CommandToRun% 
    set QUIT= 
    set /p QUIT=Press ENTER to run command or 'Q' to quit: 
    if /i "%QUIT%" == "Q" goto :eof 
    %CommandToRun% 
    goto :loop 

与原始版本不同,此命令在与重复循环相同的命令窗口中运行目标命令。根据所讨论的命令的作用,这可能更具吸引力(更少窗口弹出)。但是,一些命令可能会导致主窗口关闭;如果是这种情况,您可以通过两种不同的方式之一恢复在其自己的窗口中运行命令。在每一种情况下,更换线路:在自己的窗口中

... 
    %CommandToRun% 
    ... 

运行,并保持开放

... 
    start "%CommandToRun%" /wait cmd /k %CommandToRun% 
    ... 

使用/k将离开命令提示窗口中打开目标命令运行后 - 这如果您需要查看命令的输出并且没有自己的暂停,那么这可能是合适的。在自己的窗口中,然后关闭

... 
    start "%CommandToRun%" /wait cmd /c %CommandToRun% 
    ... 

使用/c将意味着在命令提示符目标命令运行后会关闭

运行。如果您不需要查看命令的输出,或者它有自己的暂停,这可能是适当的。

+0

关于你的回答的一些反馈:对于第一种情况(只是倒数第二行的'%CommandToRun%'(CTR)),它在程序完成执行时退出。第二种情况,我使用'start%CTR%/ wait cmd/c%CTR%'替代了'start%CTR%/ wait cmd/k%CTR%'',它工作正常。感谢您的输入。编辑你的答案,我会验证它是正确的。 – nyluje

+0

@nyluje感谢您的反馈意见;我考虑过提及'/ c',但是因为你最初使用'/ k',所以我没有打扰:-)编辑。 – TripeHound

1

会是这样的你:

@Echo Off 
Set "CordovaProjPath=C:\MyPath" 
Set "CommandToRun=cordova build android" 
Start "%CommandToRun%" Cmd /K "Cd /D %CordovaProjPath%&Echo %CommandToRun%&Pause>Nul&%CommandToRun%" 

下面是可以允许你选择双引号方法有所不同。

@Echo Off 
Set CordovaProjPath="C:\MyPath" 
Set CommandToRun="cordova build android" 
Start %CommandToRun% Cmd /K "(Cd /D %CordovaProjPath%)&(Echo %CommandToRun%)&(Pause>Nul)&(%CommandToRun%)" 
+0

这样做的工作(我希望我可以回拨命令按下箭头键,一旦它在提示中执行,如CLI模式,但没有在我的问题中指定)。我想你在'Echo CommandToRun%'的CommandToRun前面缺少一个%。正确的,我会验证你的答案(我不能自己编辑它,因为需要编辑6个字符分钟)。另外,如果我试图将''CommandToRun = cordova build android“'更改为'CommandToRun =”cordova build android“'这不起作用,那么您对此有何评论或链接来解释它? – nyluje

+0

你可以在'Start'命令上面加上':loop',在它下面加上'goto:loop' ...它会在你每次按下ENTER(使用Ctrl-C停止它)时重复提示运行该命令。如果你想变得聪明,看一下'SET/P'命令(参见'SET /?')读取一个值并有条件地循环回去,而不需要按Ctrl-C。回覆。最后一部分 - “_如果我试图改变......_”如果它工作,你为什么要改变它?使用的表单允许存储包含空格的值,但_does不会在其周围存储任何'“...”。你试图存储双引号.../cont – TripeHound

+0

...因为它正在寻找一个带有嵌入空格的命令('cordova build android')而不是带有两个参数的命令'cordova' 'build'和'android')。 – TripeHound

相关问题