在Windows命令提示符中使用shebang/hashbang

Ada*_*M-W 32 unix windows shell shebang command-prompt

我目前正在使用服务脚本在Windows 7上使用Node.js提供目录.它在MSYS shell中运行良好或使用sh,因为我已将node.exe和服务脚本放在我的〜/ bin中(这是在我的PATH上),只输入"serve"就可以了,因为它的Shebang(#!)指令告诉shell用节点运行它.

但是,Windows命令提示符似乎不支持没有*.bat或*.exe扩展名的普通文件,也不支持shebang指令.是否有任何注册表项或其他黑客可以强制这种行为从内置cmd.exe

我知道我可以写一个简单的批处理文件来运行它与节点,但我想知道它是否可以在内置的fasion中完成所以我不必为这样的每个脚本编写脚本?

更新:实际上,我在想,是否有可能为所有'未找到的文件'等编写一个默认处理程序,我可以自动尝试在其中执行sh -c

谢谢.

a_h*_*ame 50

是的,这可以使用PATHEXT环境变量.例如,它也用于注册.vbs.wsh"直接"运行脚本.

首先,您需要扩展PATHEXT变量以包含该服务脚本的扩展(在下面我假设扩展名为.foo,因为我不知道Node.js)

默认值如下所示:

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
Run Code Online (Sandbox Code Playgroud)

您需要更改它(通过控制面板),如下所示:

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.FOO
Run Code Online (Sandbox Code Playgroud)

使用控制面板(控制面板 - >系统 - >高级系统设置 - >环境变量是必要的,以保持PATHEXT变量的值.

然后,你需要使用的命令是扩展到注册正确的"解释" FTYPEASSOC:

ASSOC .foo=FooScript
FTYPE FooScript=foorunner.exe %1 %*
Run Code Online (Sandbox Code Playgroud)

(上面的例子是从提供的帮助中无耻地获取的ftype /?.)

ASSOC和FTYPE将直接写入注册表,因此您需要一个管理帐户来运行它们.

  • 但它将允许用户无需任何进一步的操作即可运行该文件. (13认同)
  • 那和shebang不一样.一个shebang适用于任何**文件; 这仅适用于特定的文件扩展名.完全不同的概念. (8认同)
  • @Mehrdad这基本上是shebang的"Windows等价物". (4认同)
  • 虽然这工作完美,但它驱动了文件中的 shebang 行,这很荒谬 - 也许,在 Windows 下,最好完全忘记 shebang 的使用并完全使用自定义文件扩展名工作(如上所述)?!(至少这是我学到的教训) (2认同)

小智 18

实际上看起来像是一个知道如何编写批处理文件的人比我也接近这个.他们的批处理文件可能会更好.

http://whitescreen.nicolaas.net/programming/windows-shebangs


Meh*_*dad 0

不,没有办法“强制”命令提示符执行此操作。

Windows 的设计根本就不像 Unix/Linux。

有没有一个shell 扩展可以做类似的事情?

我没有听说过,但这应该在超级用户上询问,而不是在这里。

  • 有可能的。看我的回答 (2认同)