36

私は現在、Windows 7でNode.jsを使用してディレクトリを提供するためにserveスクリプトを使用しています。node.exe と serve スクリプトを ~/bin (これは私のPATHで)、そして「serve」と入力するだけで機能します。これは、ノードで実行するようにシェルに指示するShebang()ディレクティブであるためです。sh#!

ただし、Windows コマンド プロンプトは、*.bat または *.exe 拡張子のない通常のファイルも、shebang ディレクティブもサポートしていないようです。この動作をビルトインから強制的に除外するために取得できるレジストリキーまたはその他のハックはありますcmd.exeか?

ノードで実行するために単純なバッチファイルを作成するだけでよいことは知っていますが、組み込みの方法で実行できるかどうか疑問に思っていたので、このようなすべてのスクリプトに対してスクリプトを作成する必要はありませんか?

更新:実際には、すべての「ファイルが見つからない」などのデフォルトのハンドラーを作成して、自動的に実行を試みることができると考えていましたsh -c

ありがとう。

4

5 に答える 5

54

はい、これはPATHEXT環境変数を使用して可能です。これは、たとえば、 「直接」実行するスクリプトを登録.vbsまたは実行するためにも使用されます。.wsh

最初に、そのサーブ スクリプトの拡張子を含むように変数を拡張する必要がありPATHEXTます (以下では、Node.js がわからないため、拡張子は .foo であると仮定します)。

デフォルト値は次のようなものです。

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

次のように (コントロール パネルから) 変更する必要があります。

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.FOO

コントロール パネル ([コントロール パネル] -> [システム] -> [システムの詳細設定] -> [環境変数]) を使用して、PATHEXT 変数の値を保持する必要があります。

FTYPE次に、コマンドとを使用して、正しい「インタープリター」をその拡張子に登録する必要がありますASSOC

ASSOC .foo=FooScript
FTYPE FooScript=foorunner.exe %1 %*

(上記の例は、によって提供されたヘルプから恥知らずに取られたものftype /?です。)

ASSOC と FTYPE はレジストリに直接書き込むため、実行するには管理者アカウントが必要です。

于 2011-07-25T15:13:46.503 に答える
3

コマンド プロンプトは shebang をサポートしていませんが、バッチと他の言語の構文を 1 つのファイルに組み合わせることができるさまざまな言語用のハイブリッド手法が多数あります。.batまたは.cmd拡張子):

0</* :{
        @echo off
        node %~f0 %*
        exit /b %errorlevel%
:} */0;


console.log(" ---Self called node.js script--- ");

console.log('Press any key to exit');
process.stdin.setRawMode(true);
process.stdin.resume();
process.stdin.on('data', process.exit.bind(process, 0));

Ruby、Perl、Python、PHP などの他の多くの言語で実行できます。

于 2018-02-22T14:41:29.223 に答える
1

いいえ、コマンドプロンプトにこれを「強制」する方法はありません。

Windowsは単にUnix/Linuxのように設計されていませんでした。

同様のことを行うシェル拡張機能はありますか?

聞いたことはありませんが、ここではなく、スーパーユーザーに質問する必要があります。

于 2011-07-25T14:57:37.727 に答える
1

これは、ウィンドウにシバンを強制的にサポートさせる簡単な方法ですが、ファイルの命名に関する注意事項があります。次のテキストをバッチ ファイルにコピーし、REM コメントの一般的な考え方に従います。

@echo off

REM This batch file adds a cheesy shebang support for windows
REM Caveat is that you must use a specific extension for your script files and associate that extension in Windows with this batch program.
REM Suggested extension is .wss (Windows Shebang Script)
REM One method to still easily determine script type visually is to use double extensions.  e.g.  script.pl.wss

setlocal enableextensions disabledelayedexpansion
if [%1] == [] goto usage

for /f "usebackq delims=" %%a IN (%1) do (
  set shebang=%%a
  goto decode_shebang
)

:decode_shebang
set parser=%shebang:~2%
if NOT "#!%parser%" == "%shebang%" goto not_shebang

:execute_script
"%parser%" %*
set exit_stat=%errorlevel%
echo script return status: %exit_stat%
goto finale

:not_shebang
echo ERROR script first line %shebang% is not a valid shebang
echo       maybe %1 is not a shebanged script
goto finale

:usage
echo usage: %0 'script with #! shebang' [scripts args]+
echo        This batch file will inspect the shebang and extract the
echo        script parser/interpreter which it will call to run the script

:finale
pause
exit /B %exit_stat%
于 2013-03-16T11:15:12.380 に答える