如果我在命令中省略后缀“.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
软件版本:
- Windows:Windows 10,版本2004(Build 19041.388)
- 节点:v12.18.3
- AVA:3.11.0
.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'
将再次打开一个新窗口。
3条答案
按热度按时间tktrz96b1#
为什么不使用Start-Process,这样你就可以控制它是否打开一个新窗口?
mec1mxoz2#
将.cmd添加到pathext可以修复丢失的路径。Ava是node.js javascript运行时的一个包。
将其添加到路径将修复它:
这个文件夹中有ava.cmd,有一个名为ava的shell脚本文件,还有一个名为ava.ps1的powershell脚本文件。出于某种原因,隐藏或重命名“ava”shell脚本也可以修复它。
引用当前目录也可以工作:
最小可重现性示例:
l2osamch3#
这是由PATTEXT变量决定的...
参见MS Learn -PATH命令和PATHEXT变量
在我的Windows 10机器上,顺序设置为...