我正试图制作一个批处理文件,以在vscode中打开一个虚拟环境。到目前为止,代码看起来像这样:
if NOT exist ./env (
pip3 install virtualenv
virtualenv env
)
.\env\Scripts\activate.ps1
if语句按预期工作,但之后的命令无效。但是,当我在Windows的默认终端中运行该程序时,它可以按预期工作。
编辑:我知道这可能不是编写程序的最佳方法,但是我是新手,可以批量使用,所以我对此感到满意。
编辑2:让我尝试更好地解释问题所在。我在普通终端上运行该程序时,效果很好。问题是我在vscode中使用了终端。如果我尝试仅在终端中运行普通命令,则说找不到命令(键入文件名)。当我使用代码运行程序扩展程序时,它可以正确运行第一行,但不会激活虚拟环境
答案 0 :(得分:1)
您正在混合批处理文件和Powershell。那是两件事。批处理文件后缀可以是.bat
或.cmd
。 Powershell文件通常以.ps1
结尾。
批处理文件正在使用C:\WINDOWS\system32\cmd.exe
。 Powershell正在使用C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe
。如您所见,这是两个不同的解释器。
如果您需要运行是Powershell脚本的.ps1
文件,则需要在Powershell中运行它,不是一个.bat
文件!
要执行脚本,您需要像这样执行脚本:
& 'C:\env\Scripts\activate.ps1'
如果在powershell上运行它,则if条件将不再起作用。您需要执行以下操作:
$PipArgs = @('install', 'virtualenv')
if(Test-Path -PathType leaf "C:\env"){
& 'pip3' $PipArgs
& 'virtualenv' 'env'
}