0

SQL Server DBAとしての仕事では、かなりのスクリプトを実行する必要があります。時々、非常に制限された環境に修正スクリプトを展開する必要があります。この環境では、スクリプトの唯一のオプションはDOSバッチである可能性があります。そのような環境の1つでは、PowerShellは言うまでもなく、VBScript/WSHでさえ可能ではありません。DOSとWindowsで十分なバッチファイルを作成したことのある人なら誰でも、それが非常に制限されており、複雑すぎることを行う必要がある場合は巨大なPIAであることを知っています。これは、Unixシェルスクリプト、Perl、Tcl、Python、Rubyなどを使用したことがある人に特に当てはまります。

これに対する可能な解決策は、より有能なスクリプト言語からの便利な機能のいくつかを追加するCMDプリプロセッサです。私はそのようなユーティリティを見つけようとしましたが、今のところ運がありません。

これが最終的に私の質問につながります:そのようなCMDプリプロセッサを知っている人はいますか?そうでない場合は、どの機能を1つにまとめたいですか?


補遺:
プリプロセッサのアイデアに慣れていない場合は、このウィキペディアのエントリを参照してください。

明確にするために、私は次のような機能を追加するツールを考えています。

  1. 関数
  2. バックティック( `)alaUnixシェル

...そしておそらく他の人。これらは私がCMDに望んでいた2つの機能であり、CMDプリプロセッサを使用してそれらを実装する方法を考えることができます。関数は、envvarsとGOTO/labelsを使用して実装できます。一時ファイルにパイプし、set / p =<を使用して結果をenvvarに読み込むことにより、バックティックを実行します。

あなたはすでにこれらの同じ目的を達成することができますが、それは非常に退屈で冗長になります-それが私がプリプロセッサにそれらのような機能の定型文を処理させるという考えに至った方法です。

バックティックの例を使用して、CMD.exeで実行する準備ができている、架空のBatch++および処理済みのバニラバッチスクリプトからの未処理のコードの例を次に示します。

Batch ++ソース(test.batpp)

copy `dir /b /s c:\ | find "CADR-README.htm"` \\srv01\users

プリプロセッサを介して実行します

bpp test.batpp > post_test.bat

結果のCMD/BATコード(post_test.bat)

dir /b /s c:\ | find "CADR-README.htm" > _bt001.tmp
set /p _BT001 =< _bt001.tmp
copy %_BT001% \\srv01\users
set _BT001=
del _bt001.tmp
4

1 に答える 1

0

あなたの質問を正しく解釈する自信がありません。スクリプト拡張機能の実行を許可しない制御された環境で実行する場合、そのようなプリプロセッサにどのようにアクセスするのでしょうか?

ただし、要求する 2 つの機能に関しては、.BAT で問題ありません。どちらの機能も、現在の Windows バージョンの BAT 処理でサポートされています。

  1. 関数:CALL引数参照 %1 .. %9 を介したパラメーターの受け渡しをサポートする拡張構文があり、構文を使用した展開置換で拡張されてい%~ます。読んでくださいHELP CALL

  2. バックティック: 何が必要かわかりませんが、FOR /Fコマンドでバックティック文字列を渡して実行し、その出力をキャプチャすることができます。読んでくださいHELP FOR

于 2010-02-16T18:16:15.310 に答える