Windows CMD 是否有与 Unix shell 的 exec 等效的命令?

Windows CMD 是否有与 Unix shell 的 exec 等效的命令?

Windows 中是否有与 Unix Shell 的“exec”等效的功能?基本上,我需要避免分叉新进程,以便保留输入/输出管道以及进程 ID。

编辑:

所以,我的问题如下。我有一个进程 A,它启动了一个脚本,这个脚本以执行进程 B 结束。我需要让 A 获取 B 的所有输出,并且能够通过终止它生成的进程(脚本)来终止 B。

在 Unix 上,执行 B 就exec可以完成这项工作。

答案1

据我所知没有。Windows 缺少execv()bash exec 执行的功能。call适用于调用批处理文件(简单,只需在当前解释器中解释文件,类似于 bash 的.命令),但不适用于 exe。

这使得在 Windows 上用任何语言编写单行包装脚本变得不可能。您总是会在 Ctrl+C 上看到“终止批处理作业?”这样的废话,并且终止批处理进程(不是使用 Ctrl+C,而是从任务管理器中)不会终止子进程。我现在正在寻找一个 C 模板文件来进行这种包装。

更新:Windows 确实_execv()在 MSVCRT 中有一个 POSIX 兼容层,但据我所知(还没有测试过)它只是一个包装器,CreateProcess所以它会一直创建一个新进程,它不能替换当前进程。

答案2

我认为称呼按你想做的做,但我不是 100% 确定。

答案3

您可以构造一个动态批处理命令并根据先前操作的输出执行它。我不确定这是否是您的解决方案,但以下代码可以正常工作。

SET yourDynamicCommand=SET var=1
%yourDynamicCommand%
ECHO var's value is %var%

答案4

  • 执行批处理文件call
  • 执行exe文件:无需命令,直接调用/path/to/exe/something.exe

相关内容