为什么批处理脚本不能运行所有命令?

时间:2018-06-26 07:28:58

标签: windows batch-file cmd

我正在尝试为我制作一个脚本,以激活虚拟环境,安装要求并启动Python服务器。

我的脚本如下:

   git clone https://github.com/ttu/dotnet-fake-json-server.git
   cd dotnet-fake-json-server/FakeServer
   dotnet run [--file] [--urls]

    #like so in my case:
    dotnet run --file_data.json --urls http://192.168.1.192:57602

我的问题是该脚本每次仅运行第一部分,而不会转到启动服务器的另一部分。

我犯了什么错误?

我在Windows 7计算机上运行此命令,并在有帮助的情况下使用cmd运行脚本。

3 个答案:

答案 0 :(得分:2)

'cmd'命令每次被调用时都会调用一个新命令行。因此,您基本上是通过这两个调用来创建两个单独的命令行实例。

如果从新cmdline内调用bat文件,则不需要cmd / k

@echo off
cd /d C:\Users\evaknid\venv\Scripts & activate & pip install -r reqs.txt  

cd /d C:\Users\evaknid\rm_analytics
developer-management-tool
python
manage.py
runserver

/ d实际上是可选的,因为您无需更改驱动器。 是否与命令一起使用取决于您自己。

robvanderwoude.com是不错的资源,如果您在批处理文件命令方面遇到麻烦

答案 1 :(得分:2)

我看不到需要创建新的cmd.exe实例,也不需要在同一行上加入命令:

@PushD "C:\Users\evaknid\venv\Scripts"
@Call "activate.bat"
@PIP install -r reqs.txt  
@PushD "..\..\rm_analytics\developer-management-tool"
@python manage.py runserver
@PopD
@PopD

最后两行可能是可选的,(如果您不继续执行那些命令以外的脚本,可以将其删除)

甚至没有必要跳入和跳出目录,只需使用与此类似的语法Call "C:\Users\evaknid\venv\Scripts\activate.bat",就可以在您的环境中同样有效。

答案 2 :(得分:1)

经过一些测试,我找到了解决问题的方法:

@echo off
cmd /k "cd /d  C:\Users\evaknid\venv\Scripts & activate & pip install -r reqs.txt & cd /d    C:\Users\evaknid\rm_analytics\developer-management-tool & python manage.py runserver"

Dan的评论帮助我了解到我不需要创建两个实例。