当我在 PowerShell 中按Ctrl+时,我收到:C
终止批处理作业(是/否)?
类似于https://superuser.com/questions/35698/how-to-supress-terminate-batch-job-yn-confirmation,Windows PowerShell 除外。
PowerShell 是否提供比 CMD 更多的对批处理作业的控制?
当我在 PowerShell 中按Ctrl+时,我收到:C
终止批处理作业(是/否)?
类似于https://superuser.com/questions/35698/how-to-supress-terminate-batch-job-yn-confirmation,Windows PowerShell 除外。
PowerShell 是否提供比 CMD 更多的对批处理作业的控制?
该行为既不是由 PowerShell 引起的,也不是 PowerShell 可以更改它(由不包含提示消息的PowerShell 源代码存储库证明)。
该行为内置于cmd.exe
- 在这种情况下,Powershell 正在调用一个.cmd
文件(批处理文件),该文件由cmd.exe
.
如果您明确控制目标可执行文件的调用,则可以通过迁移到 Powershell 来解决此问题- 请注意,这有其自身的考虑因素,请参见下文。
如果您没有明确控制目标可执行文件的调用,那么您就不走运了(除非您愿意安装第三方cmd.exe
替代品)并且必须按Ctrl+C 两次才能终止执行。
A[n ill-advised]解决方法是修改cmd.exe
二进制文件- 请参阅文章,其中包含有关如何修补cmd.exe
可执行文件以抑制提示的说明。此外,您可以在GitHub 上发布功能请求,请求从源头修复此行为,尽管出于向后兼容性的原因,这不太可能发生。
这些示例假定 Node.js 已安装,node.exe
因此位于您的 PATH 中:
首先,直接调用node.exe
,需要您按下Ctrl+C以终止进程的紧密循环。
PS> node -e "while (true);"
如您所见,按下Ctrl+C 立即终止该过程 - 没有确认提示。
现在,让我们创建一个调用相同命令并调用该批处理文件的示例批处理文件:
PS> "@echo off`nnode -e `"while (true);`"" | Set-Content test.cmd
PS> ./test.cmd
如您所见,按Ctrl+Cnow 会出现不需要的Terminate batch job (Y/N)?
提示。(如果您从 运行批处理文件,您会得到相同的行为cmd.exe
。)
gulp
是一个cmd
文件:你说你正在通过gulp
CLI 运行你的命令。
gulp
在 Windows 上, CLI的入口点是gulp.cmd
[参见底部的更新] - 即一个批处理文件。这就是npm
作为 JS 文件或 shell 脚本实现的 -package “二进制文件”(可执行文件)的一般工作方式。
可以按如下方式验证gulp
调用:gulp.cmd
# Execute from a project folder that has `gulp` installed as a dependency.
# If `gulp` is installed *globally*
# Note: CLI `npx` requires npm version 5.2.0+
PS C:\some\NodeJs\project> npx where gulp
你会看到类似的东西:
C:\some\NodeJs\project\node_modules\.bin\gulp
C:\some\NodeJs\project\node_modules\.bin\gulp.cmd
请注意,where.exe
它还列出了无扩展名的 Unix -shell 脚本...\gulp
;但是,from cmd.exe
/ Powershell 这样的 shell 脚本不能直接执行,而是执行...\gulp.cmd
-批处理文件。
(如果有疑问,请@set /p dummy="Press a key"
在文件开头放置一个命令,当您在没有扩展名的情况下gulp.cmd
调用时,您会看到该命令执行。
另请注意,没有.)gulp
.cmd
gulp.exe
更一般地,在 Windows 上,项目的node_modules\.bin
子文件夹包含CLI 的 CLI 入口点对,这些 CLI 带有项目在本地依赖的包:
node_modules\.bin\<some-cli>
是 Unix shell 脚本(其执行解释器通过其shebang 行控制)。node_modules\.bin\<some-cli>.cmd
是Windows的帮助程序批处理文件。在 npm 模块的上下文中,如果将PowerShell脚本 ( *.ps1
) 用作 Windows 上的帮助程序脚本,问题就会消失。有门票npm
和yarn
类似的软件可以做到这一点。还有一些缺点:
*.ps1
文件不能直接从 PowerShell 外部执行,尤其是从cmd.exe
文件资源管理器(并且更改它是不平凡的)。
从 Windows 10 开始, PowerShell 仍未完全取代cmd.exe
为默认 shell(如果有的话,也不会很快取代)。
当从 PowerShell*.ps1
调用时,将找到一个文件并在进程内运行,因此一个可能的解决方案是npm
项目还提供*.ps1
帮助脚本,这将优先于*.cmd
同名文件。
@echo off
start /w "" "C:\myfile.bat" 2>nul|findstr /i "termin"
if errorlevel 1 goto bypass
:bypass
echo hello by stexup YouTube channel!
timeout /t 5 >nul