概要
バッチ(*.bat)からC#で書いたソースコードを実行したい場合の手順を記す。
要件
- バッチファイルからC#に引数を渡せること
- ログファイルが出力できること
- C#からバッチファイルにリターンコードを返却できること
手順
1.Visual Studioでコンソールアプリケーションを新規作成する。
Visual Studioの基本的な操作なので、ここの説明は省きます。
2.コンソールアプリケーションに以下の様なソースを書く。
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var returnCd = 0; // リターンコード
// ログファイル
using (StreamWriter log = CreateLog())
{
// 引数が無い場合はエラーとする
if (args.Length == 0)
{
log.WriteLine("args is null.");
returnCd = 1; // リターンコードに1をセットする。
}
// 引数が有る場合は引数をログに出力し、処理を終了する
else
{
// 引数で渡された値をひとつずつログに出力する。
for (int i = 0; i < args.Length; i++)
{
log.WriteLine(args[i]);
}
}
}
System.Environment.Exit(returnCd); // リターンコードを返却しながら終了する。
}
/// <summary>
/// ログファイルを生成して返却します
/// </summary>
/// <returns>ログファイル</returns>
private static StreamWriter CreateLog()
{
// Create a writer and open the file:
StreamWriter log;
if (!File.Exists("C:\\logfile.txt"))
{
log = new StreamWriter("C:\\logfile.txt");
}
else
{
log = File.AppendText("C:\\logfile.txt");
}
return log;
}
}
}
処理内容のざっくり説明
- ログファイルを生成する。
- 引数が無い場合は"args is null.とログに出力し、"リターンコード1で終了する。
- 引数が有る場合は引数で渡された値をひとつずつログに出力し、リターンコード0で終了する。
コンソールアプリケーションをビルドする。
ビルドした結果に生成されたexeファイルは設定の応じて以下のどちらかのフォルダにあります。
%userprofile%\Documents\Visual Studio 2015\Projects\ConsoleApplication1\ConsoleApplication1\bin\Release
%userprofile%\Documents\Visual Studio 2015\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug
バッチファイルにて以下のコマンドでコンソールアプリケーションを実行する。
start /wait ConsoleApplication1.exe "パラメータ1" "パラメータ2" "パラメータ3"
echo %ERRORLEVEL% -> 0
今回のケースでは引数を渡さなかった場合、%ERRORLEVEL%は1が返却されます。
ちなみに、startコマンドのwaitオプションはアプリケーションの起動後に終了するまで待機するとのことです。
以上です。
ログファイルを見てみると、以下の様にログがちゃんと出力されていました。
パラメータ1
パラメータ2
パラメータ3
C#バッチでDB参照やDB更新をする場合は、このコンソールアプリケーションが便利だと思うのですが、日本語の情報があまりなかったのでまとめておきました。
なお、実際の業務で使う場合は、ログ周りをもう少し検討する必要があると思います。