cmd和bat的行为不同

时间:2019-05-28 16:50:01

标签: python batch-file cmd

编辑:

与同事讨论此问题后,我们认为我们知道为什么.bat运行与在cmd窗口中逐行键入时不同。我们认为行./venv/Scripts/activate.bat在外壳程序中激活了一个虚拟环境,该外壳程序与其余代码的运行位置不同。从那一行开始,我将需要所有代码在同一shell中运行。 (仅供参考,我不确定这是否有意义,因为我还比较陌生。)

我正在尝试通过运行带有必要命令的bat文件来创建虚拟环境。当我通过将.bat代码中的行复制粘贴到cmd窗口中并分别运行每个行来运行这些代码时,这些代码将按预期运行。但是,当我运行.bat文件时,它不起作用。

我认为挑战来自以下事实:bat脚本必须在目录中移动,因为虚拟环境必须在本地文件夹中创建,而随后调用的脚本和文件则托管在网络文件夹中。

此设置无法更改,因此我需要能够在.bat文件中的目录之间正确移动。

我在StackOverflow中四处张望,找不到与类似行为有关的任何问题。我一直在阅读相关文档,但是还没有发现任何有用的信息。 我正在运行anaconda3发行版。 Windows 10。 我不确定哪些信息可能有助于解决问题,所以如果您需要更多信息,请告诉我。您将在下面找到我的代码。

echo ON

REM Change directory to user's local dir
chdir C:\Users\USERNAME
C:

REM Check whether environments folder exists, if not, create it.
if not exist "C:\Users\USERNAME\Environments\" mkdir C:\Users\USERNAME\Environments

REM Create virtual environment in this new/existing folder and activate it.
python -m venv venv/
"./venv/Scripts/activate.bat"

REM Change directory to network drive where document files are located
chdir I:\NETWORKDIR_PATH\FOLDER_OF_INTEREST
I:

REM Make sure necessary packages are installed.
pip install -r ./src/requirements.txt

REM Run script and close shell after 20 secs
python "./src/main_script.py"

REM FOLDER_OF_INTEREST contains the following items:
REM two excel files which will interact with the main_script.py script
REM a folder called "src" which has the packages to be installed within my environment
REM "src" also contains two python scripts. The first is the main_script.py, the other contains functions called by main_script.py

就目前而言,当我在cmd窗口中分别运行每一行时,一切正常。

如果我尝试运行.bat文件,代码将一直运行到

python -m venv venv/
"./venv/Scripts/activate.bat"

这时,cmd窗口退出,什么也没有发生...

感谢任何帮助/建议!

PS:存在ping命令,因为如果没有,则cmd窗口退出得太快,我看不到发生了什么。

1 个答案:

答案 0 :(得分:2)

  

我们认为./venv/Scripts/activate.bat行激活了一个虚拟   外壳环境与其余代码的运行环境不同。

不。批处理文件逐行执行,直到命中EOF(文件末尾)为止。因此,在activate.bat的结尾,解释器认为工作已完成,就是这样。

要能够“返回”调用脚本,您需要call被调用脚本(基本上可以保存返回点)

要从字面上在另一个cmd实例(您称为“外壳中的虚拟环境”)中启动脚本,您需要使用start命令。