首页 > 解决方案 > 关于执行后不关闭 cmd/powershell 窗口的 powershell vs cmd

问题描述

我有一个ipsxe-comp-vars.bat批处理文件,它为 intel fortran 编译器以及 c 和 c++ 编译器设置环境变量。我创建了一个快捷方式,我右键单击快捷方式,转到目标并放置路径cmd.exe和 a /K(这样命令提示符不会关闭)和路径之前的空格.bat,单击应用并好的。然后我可以将快捷方式固定到任务栏。当我点击它时:bat 被执行,最后,我回到命令提示符,cmd 窗口没有关闭。然后我可以在这个命令窗口中开始编译等。

.bat在与我创建文件的文件相同的位置ipsxe-comp-vars.ps1

Set-ExecutionPolicy -Scope CurrentUser Unrestricted
Set-Location "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.4.210\windows\bin"
& "C:\Windows\System32\cmd.exe" /E:ON /V:ON "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.4.210\windows\bin\ipsxe-comp-vars.bat" intel64 vs2015

然后我为这个文件创建一个快捷方式.ps1,右键单击快捷方式,并修改它的目标如下:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit - command "& 'C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.4.210\windows\bin\ipsxe-comp-vars.ps1'"

然后我还可以将这个新的快捷方式固定到任务栏。当我点击它时:.ps1文件被执行,但窗口关闭,在这种情况下消除了快捷方式概念的杠杆作用。

我究竟做错了什么 ?

标签: windowspowershellcmdwindows-10intel-fortran

解决方案


尝试以下方法,这是我的快捷方式-noexit的设置方式。

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -File "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.4.210\windows\bin\ipsxe-comp-vars.ps1"

-命令

执行指定的命令(和任何参数),就好像它们是在 PowerShell 命令提示符下键入的一样,然后退出,除非指定了 NoExit 参数。本质上,-Command 之后的任何文本都作为单个命令行发送到 PowerShell(这与 -File 处理发送到脚本的参数的方式不同)。

-文件 []

在本地范围内运行指定的脚本(“dot-sourced”),以便脚本创建的函数和变量在当前会话中可用。输入脚本文件路径和任何参数。File 必须是命令中的最后一个参数,因为在 File 参数名称之后键入的所有字符都被解释为脚本文件路径,后跟脚本参数及其值。

您可以在 File 参数的值中包含脚本的参数和参数值。例如:-File .\Get-Script.ps1 -Domain Central请注意,传递给脚本的参数是作为文字字符串传递的(在当前 shell 解释之后)。例如,如果您在 cmd.exe 中并且想要传递环境变量值,您将使用 cmd.exe 语法powershell -File .\test.ps1 -Sample %windir%: windir”,而不是该环境变量的值:powershell -File .\test.ps1 -Sample $env:windir

通常,脚本的开关参数要么被包含,要么被忽略。例如,以下命令使用 Get-Script.ps1 脚本文件的 All 参数:-File .\Get-Script.ps1 -All

https://docs.microsoft.com/en-us/powershell/scripting/core-powershell/console/powershell.exe-command-line-help?view=powershell-6


推荐阅读