VBScript(cscriptで起動されたvbsファイル)に引数を渡すことはできますか?
このスクリプトは「test.vbs」に保存されています。
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.OpenTextFile(workFolder &"\test.txt", 2, True)
File.Write "testing"
File.Close
Set File = Nothing
Set FSO = Nothing
Set workFolder = Nothing
スクリプトを実行するときに、「workFolder」変数の値を渡します。
これどうやってするの?できますか? 「cscript test.vbs workFolder: 'C:\ temp \'」のようなものでしょうか?
ボーナス質問:「set workFolder = Nothing」で渡された変数をクリーンアップする必要がありますか、または終了時にVBSCriptが自動的にそれを行いますか? 「Set File = Nothing」と「Set FSO = Nothing」も不要なのかもしれません。これらの両方の質問に対する答えを知っている場合はお知らせください。
WScript.Arguments
を使用して、スクリプトに渡された引数にアクセスできます。
スクリプトを呼び出す:
cscript.exe test.vbs "C:\temp\"
スクリプト内:
Set File = FSO.OpenTextFile(WScript.Arguments(0) &"\test.txt", 2, True)
実際にスクリプトに引数が渡されているかどうかを確認することを忘れないでください。これを行うには、Count
プロパティを確認します。
if WScript.Arguments.Count = 0 then
WScript.Echo "Missing parameters"
end if
ファイルを閉じた後にスクリプトが終了した場合、変数をNothing
に設定する必要はありません。 cscript.exeプロセスが終了すると、リソースは自動的にクリーンアップされます。通常、変数をNothing
に設定する必要があるのは、スクリプトの実行中にリソースを明示的に解放する場合のみです。その場合、COMオブジェクトへの参照を含む変数をNothing
に設定すると、スクリプトが終了する前にCOMオブジェクトが解放されます。これはボーナスの質問に対する簡単な回答です。詳細については、次の関連する質問をご覧ください。
VBSの内部でパラメーターにアクセスできます
Wscript.Arguments(0)
Wscript.Arguments(1)
等々。パラメーターの数:
Wscript.Arguments.Count
コマンドライン経由で渡される各引数には、次のコマンドでアクセスできます。Wscript.Arguments.Item(0)ここで、ゼロは引数番号です。つまり、0、1、2、3などです。
したがって、あなたのコードには次のものがあります:
strFolder = Wscript.Arguments.Item(0)
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.OpenTextFile(strFolder, 2, True)
File.Write "testing"
File.Close
Set File = Nothing
Set FSO = Nothing
Set workFolder = Nothing
Wscript.arguments.countを使用すると、誰かが適切な値を入力しなかった場合などにエラーをトラップできます。
実際、ボーナスの質問に対する答えは「いいえ」です。クリーンアップする必要はありません。しかし、一般的なプログラミングの習慣は、夕食後に皿をきれいにするなど、常にあなたのものをきれいにすることです。
新しいプログラマーを教える際に、「クリーンアップする必要がありますか?」に対する正しい答え。常にイエスです。片付けをする習慣がある場合、片付けます。その後、実際に必要な場合(最も小さいものがヒープを混乱させるなど)、クリーンアップは習慣であり、行われます。
より良い質問は、「このスクリプトの最後でクリーンアップすると問題が発生しますか?」です。またはそれ以上...「長いスクリプトを使用している(またはGCを使用できない)と仮定すると、これはこれらのオブジェクトをクリーンアップする正しい方法ですか?」
私の2セント。ポール