web-dev-qa-db-ja.com

Cscript / Wscriptを使用せずにコマンドラインからVBScriptを実行する方法

私はVBScriptの初心者です。私はそれをグーグルで検索し、以下のコマンドを実行してコマンドラインからVBScriptを実行できることを知りました:

たとえば、私のvbscript名はConverter.vbs&フォルダーに存在するD:\VBS

次の方法で実行できます。

CScript "D:\VBS\Converter.vbs"

OR

WScript "D:\VBS\Converter.vbs"

ここで、上記のVBScriptwithoutCscriptまたはWscriptコマンドを、単にVBscript名、つまりConverterを入力して実行したいと思います。

毎回VBSCRIPTの完全なパスを指定したくありません。

誰でもそれを行う方法を教えてもらえますか?

13
Solution Seeker

各部分は個別に実行できるため、これをいくつかの異なる部分に分けます。 (同様の答えが表示されますが、ここでより詳細な説明をします。)

最初の部分、「CScript」(または「WScript」)を入力しないようにするには、* .vbsスクリプトファイルの起動方法をWindowsに指示する必要があります。 My Windows 8(これらのすべてのコマンドが古いWindowsで示されているように正確に機能することは確認できませんが、コマンドを少し変更する必要がある場合でもプロセスは同じです)、コンソールウィンドウ(別名「コマンドプロンプト」、または別名[誤って] "プロンプトを実行します")および「assoc .vbs」と入力します。その結果、次のような応答が返されます。

C:\Windows\System32>assoc .vbs
.vbs=VBSFile

それを使用して、「ftype VBSFile」と入力すると、次の応答が返されます。

C:\Windows\System32>ftype VBSFile
vbsfile="%SystemRoot%\System32\WScript.exe" "%1" %*

-または-

C:\Windows\System32>ftype VBSFile
vbsfile="%SystemRoot%\System32\CScript.exe" "%1" %*

これらの2つがすでに上記のように定義されている場合、* .vbsファイルを起動する方法を知るために、Windowsはすでにセットアップされています。 Bと警告。)

いずれかのコマンドが上記のように応答しなかった場合(またはassocによって報告されたファイルの種類やftypeによって報告されたように実行されたコマンドの名前または場所が異なる場合、同様の応答)、それらを自分で入力できます:

C:\Windows\System32>assoc .vbs=VBSFile

-および/または-

C:\Windows\System32>ftype vbsfile="%SystemRoot%\System32\WScript.exe" "%1" %*

これらのコマンドの追加情報については、「help assoc」または「help ftype」と入力することもできます。これらのコマンドは、自動的に実行する場合に便利です。特定の拡張子を持つファイル名を入力するだけで特定のプログラム。 (ただし、一部のファイル拡張子はWindowsまたはインストールしたプログラムによって特別に設定され、正常に動作するように注意してください。assoc/ ftypeによって報告される現在割り当てられている値を常に確認し、必要に応じてテキストファイルに保存しますそれらを復元します。)

2番目の部分、コンソールウィンドウからコマンドを入力するときにファイル拡張子を入力しないようにします。Windows(およびCMD.EXEプログラム)が入力したコマンドを見つける方法を理解することは、この(および次の)部分に役立ちます。コマンドを入力するとき、コマンドの例として "querty"を使用します。システムはまず、コマンドの内部リストでコマンドを見つけようとします(システム自体のWindowsレジストリの設定を介して、またはその場合にプログラムされます) CMD.EXEの)。そのようなコマンドがないため、現在の%PATH%環境変数でコマンドを見つけようとします。 DOS/Windowsの古いバージョンでは、CMD.EXE(および/またはCOMMAND.COM)は、ファイル拡張子「.bat」、「。exe」、「。com」、および場合によっては「.cmd」をコマンド名に自動的に追加します。拡張機能(「querty.exe」を誤って実行しないようにするための「querty.bat」など)を明示的に入力した場合を除き、入力済み。最新のWindowsでは、%PATHEXT%環境変数にリストされている拡張機能が試されます。そのため、.vbsを%PATHEXT%に追加するだけです。たとえば、%PATHEXT%は次のとおりです。

C:\Windows\System32>set pathext
PATHEXT=.PLX;.PLW;.PL;.BAT;.CMD;.VBS;.COM;.EXE;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY

拡張子には「。」が含まれている必要があり、「;」で区切られている必要があります。また、.VBSは.CMDの後で、.COMの前にリストされることに注意してください。これは、コマンドプロセッサ(CMD.EXE)が複数の一致を検出した場合、最初にリストされたものを使用することを意味します。つまり、query.cmd、querty.vbs、querty.comがある場合は、querty.cmdを使用します。

ここで、%PATHEXT%を設定し続けることなく、これを常に実行したい場合は、システム環境を変更する必要があります。コンソールウィンドウで入力すると、そのコンソールウィンドウセッションでのみ変更されます。このプロセスは読者の演習として残しておきます。 :-P

サードパート、常にフルパスを入力せずにスクリプトを実行します。この部分は、2番目の部分に関連して、DOSの時代から存在しています。ファイルが%PATH%環境変数にリストされているディレクトリ(Windowsの場合はフォルダです)のいずれかにあることを確認してください。私の提案は、あなたが頻繁に作成または使用するさまざまなファイルやプログラムを保存するための独自のディレクトリを作成することですコンソールウィンドウ/コマンドプロンプトからthatつまり、スタートメニューまたは他の方法から実行するプログラムに対してこれを行うことについて心配する必要はありません。コンソールウィンドウのみ。Windowsまたは自動インストーラによってインストールされているプログラムを混乱させないでください。やる)。

個人的には、バッチファイル用の「C:\ sys\bat」ディレクトリ、* .exeおよび* .comファイル用の「C:\ sys\bin」ディレクトリを常に作成します(たとえば、「md5sum」のようなものをダウンロードする場合、MD5チェックサムユーティリティ)、VBScriptsの「C:\ sys\wsh」ディレクトリ(および「Windows Scripting Host」または「wsh」プログラムを使用して両方が実行されるため、「wsh」という名前のJScript)など。次に、これらをシステムの%PATH%変数に追加し(コントロールパネル->システムの詳細設定->詳細タブ->環境変数ボタン)、入力時にWindowsが常にそれらを検出できるようにします。

つの部分すべてを組み合わせるを使用すると、コマンドラインコマンドを入力できる場所であればどこでも、ベースファイル名を入力するだけでVBScriptを起動できるようにWindowsシステムが構成されます。ほぼすべてのファイルタイプ/拡張子に対して同じことを行うことができます。おそらく私の%PATHEXT%出力で見たように、私のシステムはPerlスクリプト(.PLX; .PLW; .PL)とPython(.PY)スクリプトも実行するようにセットアップされています。また、「C:\ sys\bat; C:\ sys\scripts; C:\ sys\wsh; C:\ sys\bin」を%PATH%の前に置き、さまざまなバッチファイル、スクリプトファイル、これらのディレクトリにあるため、Windowsは常にそれらを見つけることができます。これは、いくつかのコマンドを「オーバーライド」する場合にも便利です。* .batファイルをパスの最初に置くと、システムは* .exeファイルの前にそれらを見つけます。たとえば、* .batファイルは、実際の*。exeファイルへの完全なパスを指定することで、実際のプログラムを起動できます。コマンドの詳細やその他の例については、「バッチファイルプログラミング」のさまざまなサイトを参照してください行..まだ死んでいない!)

最後の注意事項:さまざまな警告や警告については、他のサイトをチェックしてください。この質問により、「converter.vbs」という名前のスクリプトが提示されました。これは、ハードドライブをFATファイルシステムからNTFSファイルシステムに変換するWindowsプログラムである「convert.exe」コマンドに危険なほど近いものです。入力を間違えた場合は、ハードドライブを壊してください!

一方、上記の手法を使用すると、そのような間違いからも自分を守ることができます。例としてCONVERT.EXEを使用します。「REAL_CONVERT.EXE」などの名前に変更し、次を含む「C:\ sys\bat\convert.bat」などのファイルを作成します。

@ECHO OFF
ECHO !DANGER! !DANGER! !DANGER! !DANGER, WILL ROBINSON!

ECHO This command will convert your hard drive to NTFS! DO YOU REALLY WANT TO DO THIS?!
ECHO PRESS CONTROL-C TO ABORT, otherwise..

REM "PAUSE" will pause the batch file with the message "Press any key to continue...",
REM and also allow the user to press CONTROL-C which will Prompt the user to abort or
REM continue running the batch file.
PAUSE

ECHO Okay, if you're really determined to do this, type this command:
ECHO.    %SystemRoot%\SYSTEM32\REAL_CONVERT.EXE
ECHO to run the real CONVERT.EXE program. Have a Nice day!

また、最新のWindowsでCHOICE.EXEを使用して、ユーザーが本当に続行したい場合などに「y」または「n」を入力することもできます。また、バッチ(およびスクリプト)ファイルの力!

このすべての機能を使用する方法に関する優れたリソースへのリンクを次に示します。

http://ss64.com/

http://www.computerhope.com/batch.htm

http://commandwindows.com/batch.htm

http://www.robvanderwoude.com/batchfiles.php

これらのサイトのほとんどはバッチファイルを対象としていますが、それらの情報のほとんどは、あらゆる種類のバッチ(* .bat)ファイル、コマンド(* .cmd)ファイル、およびスクリプト(* .vbs、* .js、 * .pl、* .pyなど)ファイル。

15
C. M.

コマンドラインでスクリプトの完全なファイル仕様またはファイル名を入力すると、シェルは次の方法でアクセス可能な情報を使用します。

assoc | grep -i vbs
.vbs=VBSFile

ftype | grep -i vbs
VBSFile=%SystemRoot%\System32\CScript.exe "%1" %*

スクリプトに対して実行するプログラムを決定します。私の場合、それはcscript.exeで、あなたのものではwscript.exeになります。これは、WScript.EchosがMsgBoxesになった理由を説明しています。

なので

cscript /?
Usage: CScript scriptname.extension [option...] [arguments...]

Options:
 //B         Batch mode: Suppresses script errors and prompts from displaying
 //D         Enable Active Debugging
 //E:engine  Use engine for executing script
 //H:CScript Changes the default script Host to CScript.exe
 //H:WScript Changes the default script Host to WScript.exe (default)
 //I         Interactive mode (default, opposite of //B)
 //Job:xxxx  Execute a WSF job
 //Logo      Display logo (default)
 //Nologo    Prevent logo display: No banner will be shown at execution time
 //S         Save current command line options for this user
 //T:nn      Time out in seconds:  Maximum time a script is permitted to run
 //X         Execute script in debugger
 //U         Use Unicode for redirected I/O from the console

ショーでは、// Eと// Sを使用して、デフォルトのホストをcscript.exeに永続的に切り替えることができます。

怠け者で拡張機能を入力したくない場合は、PATHEXT環境変数が

set | grep -i vbs
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw;.tcl;.PSC1

.VBSを含み、パスにConverter.cmd(ハードディスクを洗濯機に変換する)がありません。

コメントの更新:

「私のvbscriptの絶対パスを毎回指定したくない」場合は、次のことができます。

  1. cONVERTER.VBSをPATH環境変数に含まれるフォルダーに入れます。次に、シェルはすべてのパスを検索します-必要に応じてPATHEXTおよびftype/assoc情報を考慮して-一致する「実行可能ファイル」を探します。
  2. cONVERTER.BAT/.CMDをcscript p:\ath\to\CONVERTER.VBSのような行を含むパスディレクトリに配置します

bothの場合、(厄介な)驚きを避けるために拡張子を入力します。

9
Ekkehard.Horner

バッチ/ vbscriptファイルハイブリッドにvbscriptを隠してみませんか。バッチハイブリッドConverter.batに名前を付けると、cmd行からConverterとして直接実行できます。すべてのスクリプトをデフォルトでCscriptまたはWscriptから実行できますが、vbsをコンソールスクリプトではなくWindowsスクリプトとして実行する場合は、後で混乱が生じる可能性があります。したがって、コードをバッチファイルに設定し、直接実行するだけです。

答えを確認してください-> ここ

次に例を示します。

Converter.bat

::' VBS/Batch Hybrid
::' --- Batch portion ---------
rem^ &@echo off
rem^ &call :'sub
rem^ &exit /b

:'sub
rem^ &echo begin batch
rem^ &cscript //nologo //e:vbscript "%~f0"
rem^ &echo end batch
rem^ &exit /b

'----- VBS portion -----
Dim tester
tester = "Convert data here"
Msgbox tester
4
Rich

これをバッチファイルに入れることができないのはなぜかと思います。例:

cd D:\VBS\
WSCript Converter.vbs

上記のコードをテキストファイルに挿入し、テキストファイルを.bat拡張子で保存します。ここで、この.batファイルを実行するだけです。

4
con_9