C#スクリプトはコンパイラ型の言語であるC#をスクリプト言語の様に扱うことが出来ます。
通常のC#プログラミングでは、新しくプロジェクトを作成して、複数の設定やファイルを準備する必要があります。
しかし、C#スクリプト(.csx)であれば、プロジェクトの作成は不要。
テキストエディタで.csx形式のソースコード(スクリプトファイル)を書き、ビルドやコンパイル作業も一切なしで、そのまま即実行することができます。
導入
次のコマンドを Windows ターミナル(PowerShell / cmd / Windows Terminal) で実行してください。
dotnet tool install -g dotnet-script
バージョンの確認
dotnet script --version
# 1.6.0
スクリプトの実行方法
拡張子
拡張子は.csxになります。
サンプルスクリプト
ファイル名:hello.csx”
#r "System.dll"
Console.WriteLine("Hello C# Script");
#r "System.dll"
は本来不要ですが、vscodeでConsole.WriteLine()
が見つからないとエラーが出ていましたので回避用のおまじないです。
実行
dotnet-script hello.csx
# 結果
# Hello C# Script
ファイル操作を操作するスクリプト
カレントディレクトリのファイル・サブディレクトリの一覧を出力
UNIXのlsコマンドやMS-DOSのdirコマンドの様にコンソールにファイルの一覧を出力します。
// カレントディレクトリのファイル・サブディレクトリの一覧
using System;
using System.IO;
// カレントディレクトリを取得
string dir = Directory.GetCurrentDirectory();
foreach (var entry in Directory.EnumerateFileSystemEntries(dir))
{
// エントリ=ファイル・サブディレクトリをコンソールへ出力
Console.WriteLine(entry);
}
テキストファイルを1行ごと読み込み出力する
C#スクリプトでUNIXの「cat」相当(最小サンプル)
// テキストファイルを1行ごと読み込み出力する。
using System;
using System.IO;
string path = "sample.txt"; // ここに読み込みたいファイル名を指定
foreach (string line in File.ReadLines(path))
{
Console.WriteLine(line);
}
ファイルのコピー
// ファイルのコピー
using System;
using System.IO;
string src = "dir.csx"; // コピー元ファイル
string dst = "dir_copy.txt"; // コピー先ファイル
File.Copy(src, dst, overwrite: true);
Console.WriteLine($"{src} を {dst} にコピーしました。");
ファイルの移動・リネーム
// ファイルの移動・リネーム
using System;
using System.IO;
string src = "dir_copy.txt"; // 移動元ファイル
string dst = "dir_rename.txt"; // 移動先ファイル
File.Move(src, dst, overwrite: true);
Console.WriteLine($"{src} を {dst} に移動(リネーム)しました。");
ファイルの削除
// ファイルの削除
using System;
using System.IO;
string path = "dir_rename.txt"; // 削除するファイル
if (File.Exists(path))
{
File.Delete(path);
Console.WriteLine($"{path} を削除しました。");
}
else
{
Console.WriteLine($"{path} は存在しません。");
}
ファイルの新規作成
// ファイルの新規作成
using System;
using System.IO;
string path = "sample.txt"; // 新規作成するファイルのパス
// 空ファイル作成(既存ならタイムスタンプのみ更新)
using (var fs = File.Open(path, FileMode.OpenOrCreate))
{
fs.Close();
}
File.SetLastWriteTime(path, DateTime.Now);
Console.WriteLine($"{path} を touch しました。");
ディレクトリの作成
// ディレクトリの作成
using System;
using System.IO;
var path = @".\SubFolder";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
Console.WriteLine($"ディレクトリを作成しました: {path}");
}
else
{
Console.WriteLine($"既に存在します: {path}");
}
ディレクトリの削除
// ディレクトリの削除
using System;
using System.IO;
var path = @".\SubFolder"; // 必要に応じて変更してください
if (Directory.Exists(path))
{
Directory.Delete(path, recursive: true);
Console.WriteLine($"ディレクトリを削除しました: {path}");
}
else
{
Console.WriteLine($"指定されたディレクトリは存在しません: {path}");
}
コメント