如果我在命令中省略了后缀“.cmd”,则会在新窗口中打开它。为什么是这样?是什么触发新窗口打开的?
在 Powershell 5 和 Powershell Core 7 中,以下第一个将导致打开一个新窗口,而其他三个将在同一窗口中显示输出:
& 'C:\some_path\node_modules\.bin\ava' 'help'
& '.\node_modules\.bin\ava' 'help'
(之前使用过的cd C:\some_path
)& 'C:\some_path\node_modules\.bin\ava.cmd' 'help'
& 'C:\some_path\node_modules\.bin\ava.ps1' 'help'
同时,在 cmd 中,所有三个程序在同一窗口中显示其输出,根本没有打开新窗口:
C:\some_path\node_modules\.bin\ava help
.\node_modules\.bin\ava help
(之前使用过的cd C:\some_path
)C:\some_path\.bin\ava help
我仅以help命令为例,最后我喜欢使用
ava debug --serial someFile.js
软件版本:
.bin
目录中有三个相关文件:ava.cmd
@ECHO off
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
"%_prog%" "%dp0%\..\ava\cli.js" %*
ENDLOCAL
EXIT /b %errorlevel%
:find_dp0
SET dp0=%~dp0
EXIT /b
ava.ps1
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
& "$basedir/node$exe" "$basedir/../ava/cli.js" $args
$ret=$LASTEXITCODE
} else {
& "node$exe" "$basedir/../ava/cli.js" $args
$ret=$LASTEXITCODE
}
exit $ret
ava
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../ava/cli.js" "$@"
ret=$?
else
node "$basedir/../ava/cli.js" "$@"
ret=$?
fi
exit $ret
由于该调用是通过Visual Studio代码使用proposed configuration调试AVA脚本完成的,因此,我对所使用命令的影响是有限的。
$env:PATHEXT
等于.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
如果我将文件
ava
重命名为ava_2
,则不再打开任何新窗口。如果创建了一个名为ava
的空文件,则命令& 'C:\some_path\node_modules\.bin\ava' 'help'
再次打开一个新窗口。 最佳答案
为什么不使用Start-Process代替,所以您可以控制它是否打开一个新窗口?
Start-Process -FilePath 'C:\some_path\node_modules\.bin\ava' -ArgumentList 'help' -NoNewWindow -Wait