从另一个 shell(Powershell Core)运行 .lnk 所针对的控制台程序?

从另一个 shell(Powershell Core)运行 .lnk 所针对的控制台程序?

我有一个.lnk包含 CLI 应用程序快捷方式的文件夹,这些快捷方式位于不同的文件夹中。快捷方式文件夹已添加到PATH,并且我的文件PATHEXT夹包含“.lnk”扩展名。因此,我只需ffplay在 shell 中键入,Windows 就会自动找到该D:/shortcuts/ffplay.lnk文件并运行ffplay.exe它指向的可执行文件。

当我从 cmd 运行时ffplay,它按预期工作,将使用帮助输出到我的终端并退出。当我从 Powershell 执行相同操作时(无论它是旧的powershell.exe还是新的pwsh.exe),没有 stdout 输出,而是出现一个带有输出的新 conhost 窗口。

是否可以让链接的命令像普通控制台程序可执行文件一样运行?

如何重现:

  1. 创建.lnk本机命令的快捷方式,例如C:/Windows/System32/PING.EXE,使用不同的名称,以便您可以运行它(所以,也许D:/shortcuts/lnkping.lnk)。

  2. 打开cmd.exe,cd 到快捷方式目录,运行.\lnkping.lnk 1.1.1.1,输出正常内联。

    例如 CMD 输出

    CMD 链接输出 - Windows 10 - 屏幕截图

  3. 打开powershell.exe,cd 到快捷方式目录,运行.\lnkping 1.1.1.1- 调用立即返回,新的 conhost 窗口打开并在那里显示输出。

    PowerShell CMD/链接输出 - Windows 10 - 屏幕截图

答案1

是否可以让链接的命令像普通控制台程序可执行文件一样运行?

解决这个问题的方法可能不是使用.lnk文件,而是使用.bat文件代替,例如:

例如 lnkping.bat

@Echo Off
C:\Windows\System32\ping.exe %*

%*允许.bat文件接受任意数量的附加参数,然后这些参数将传递给指定的可执行文件,就像直接在命令行中输入一样。与.lnk文件非常相似,在正常情况下,.bat调用“脚本”时不需要包含扩展名(因此例如.\lnkping 1.1.1.1应该可以正常工作)。

相关内容