5
14

More than 5 years have passed since last update.

バッチ(*.bat)からC#のコンソールアプリケーションを実行する。

Last updated at Posted at 2016-11-25

概要

バッチ(*.bat)からC#で書いたソースコードを実行したい場合の手順を記す。

要件

  • バッチファイルからC#に引数を渡せること
  • ログファイルが出力できること
  • C#からバッチファイルにリターンコードを返却できること

手順

1.Visual Studioでコンソールアプリケーションを新規作成する。

Visual Studioの基本的な操作なので、ここの説明は省きます。

2.コンソールアプリケーションに以下の様なソースを書く。

Program.cs
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;
        }
    }
}

処理内容のざっくり説明

  1. ログファイルを生成する。
  2. 引数が無い場合は"args is null.とログに出力し、"リターンコード1で終了する。
  3. 引数が有る場合は引数で渡された値をひとつずつログに出力し、リターンコード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オプションはアプリケーションの起動後に終了するまで待機するとのことです。

以上です。

ログファイルを見てみると、以下の様にログがちゃんと出力されていました。

logfile.txt
パラメータ1
パラメータ2
パラメータ3

C#バッチでDB参照やDB更新をする場合は、このコンソールアプリケーションが便利だと思うのですが、日本語の情報があまりなかったのでまとめておきました。

なお、実際の業務で使う場合は、ログ周りをもう少し検討する必要があると思います。

5
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
14