1. ホーム
  2. スクリプト・コラム
  3. その他

スクリプトとバッチ処理がひとつに

2022-01-07 03:59:58
バッチ処理は、私たちのコンピュータを管理し、いくつかの日常業務を行うための良いヘルパーであり、Windowsのアップグレードに伴い、バッチ処理はより多くのことを行うことができます。しかし、バッチ処理でできないこともまだたくさんあります。良いことは、Microsoftが後でWindowsでWindows Script Hostを追加し、我々は今、WMIと、より複雑な作業を完了するためにJScriptまたはVBScriptを使用することができますが、全能と言うことができる。CScript.exeまたはWScript.exeでwshスクリプトを実行するには、CScript.exeとWScript.exeがいくつかのパラメータは、実行結果に別のパラメータが影響を与えることがあります設定してくださいしてください。デフォルトのインタプリタ(WScript.exe)とデフォルトのパラメータを使用したスクリプトの中には、私が望む結果を得られないものがあることに気づきました。そのため、他の人が使うスクリプトを書くときには、やはりCScript.exeとWScript.exeのどちらを使って実行するのか、どのパラメータに合わせるのかを細かく説明しなければならない。この問題を解決するにはどうしたらいいか?スクリプトを正しく実行させるために、別のバッチファイルを書くという方法がある。しかし、その場合、2つのファイルを用意する必要がある。1つのファイルだけでいいのですか?はい、できます。スクリプトとバッチを1つにまとめましょう。これは、上記の問題を解決するだけでなく、バッチとWSHの両方の利点を生かすことができます。
  jScriptは/* */でコメントとしてテキストを入れることができるので、jScriptを選択しました。しかし、/* */はバッチ処理では不正な文字なので、どのようにすれば不要なエラーメッセージなしに導入できますか?
  バッチとJScriptの両方で受け入れられて、/*を持ち込むようなことはあまりしない文が必要です。JScriptでは@set @varname=value、バッチでは: set varname=valueという文があり、その前に@を付けて、その文が出力されないことを示すことができます。これだけでいいんです! に関しては、@rem */を使うのが良いでしょう。
  以下のコードをご覧ください(拡張子はbat)、とてもシンプルです。
コピーコード コードは以下の通りです。

  @set @this_call_started=1 /*
  @echo off
  @rem Allow CMD.EXE extensions
  @SETLOCAL ENABLEEXTENSIONS
  @rem Allow CMD.EXE to delay the expansion of environment variables
  @SETLOCAL ENABLEDELAYEDEXPANSION
  ...
  Batch statements are written here
  ...
  @rem "%~dpnx0" extends the file name of the batch file itself to the file name with the full path
  @rem %* All parameters of the batch file itself
  @rem re-call this file as a script file
  @call CScript.EXE "%~dpnx0" //Nologo //e:jscript %*
  ...
  Batch statements are written here
  ...
  @goto end_this_call
  @rem */
  //Windows Script Start==================================================
  ...
  Script statements are written here
  ...
  //Windows Script end=====================================================
  /*
  :end_this_call
  ...
  Batch statements are written here
  ...
  @set @this_call_started=
  @rem */