![在批处理文件中编写简单命令列表时遇到问题](https://linux22.com/image/1312952/%E5%9C%A8%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E4%B8%AD%E7%BC%96%E5%86%99%E7%AE%80%E5%8D%95%E5%91%BD%E4%BB%A4%E5%88%97%E8%A1%A8%E6%97%B6%E9%81%87%E5%88%B0%E9%97%AE%E9%A2%98.png)
我正在尝试在一个批处理中运行一些简单的批处理命令。
实际上,每个命令都是一个批处理命令,如下所示:
rails generate scaffold illness name:string
rails generate scaffold ingredient name:string origin_id:integer
现在,我的批处理文件不再运行所有 30 条命令,而是仅运行第一个命令并返回到提示行。所以我必须手动运行它。
答案1
您必须将该词call
放在批处理文件的前面...
@echo 关闭 调用 rails 生成脚手架疾病名称:string 调用 ralis 生成脚手架成分名称:string origin_id:integer
这假设“rails”实际上是rails.bat。
答案2
虽然 jftuga 之前的回答是正确的,但更完整的答案如下:
@echo off
call rails generate scaffold illness name:string
call ralis generate scaffold ingredient name:string origin_id:integer
你必须放置一个称呼如果您希望脚本在每次调用后继续,则批处理文件中每行的前面都有一个外部命令,用于触发新进程。因此,DIR 和 COPY 等内部命令不需要调用。但是,运行新的命令提示符或甚至另一个批处理文件时,控制权将完全移交给该程序,除非出现以下字称呼位于行首。实际上,一旦您出口它。
有些程序运行时会暂停,但完成后会返回到批处理文件的下一行。在下面的批处理文件中,脚本会在每次调用记事本后暂停,并在记事本退出后开始(两次)。所以它们实际上是相同的。
notepad.exe
call notepad.exe
echo It came back.
但是当调用另一个批处理文件时,除非前面有一个调用,否则完全控制权将传递给新进程。因此在下面的代码中,bat 文件的第一次调用将在完成时返回,但第二次调用永远不会返回,因此最后一行 echo 永远不会运行。call firstBatch.bat SecondBatch.bat echo 你永远不会看到这一行
我不确定 rails 命令是如何工作的,但它似乎像是一个批处理会话。也许它是一个批处理文件。前两次对 cmd 的调用不会返回,直到你在该实例中键入 exit,返回到之前的 shell。称呼无关紧要。但第三个使用 /c 开关,表示执行命令并自动返回。如果您想在向新 cmd 会话发送命令后保持其处于活动状态,请使用 /K 开关。有关此内容的更多帮助:命令 /?
cmd
call cmd
cmd /c dir
echo You will see this after typing Exit twice to leave two new instances of cmd. The third instance returned automatically.