Маленькая забавность о том, как использовать все возможности dotNet в обычных bat-скриптах. Или сделать скриптовый язык из С#.
Далее рассказан простой способ скомпилировать и запустить код С#, который находится внутри bat-файла.

Не буду долго томить:

/*
@echo off && cls
set WinDirNet=%WinDir%\Microsoft.NET\Framework
IF EXIST "%WinDirNet%\v2.0.50727\csc.exe" set csc="%WinDirNet%\v2.0.50727\csc.exe"
IF EXIST "%WinDirNet%\v3.5\csc.exe" set csc="%WinDirNet%\v3.5\csc.exe"
IF EXIST "%WinDirNet%\v4.0.30319\csc.exe" set csc="%WinDirNet%\v4.0.30319\csc.exe"
%csc% /nologo /out:"%~0.exe" %0
"%~0.exe"
del "%~0.exe"
exit
*/

class HelloWorld
{
static void Main()
{
System.Console.WriteLine("Hello, World!\r\nI am at " + System.Environment.Version);
System.Console.ReadLine();
}
}

Разберем, как это получается.
Сначала работает bat-интерпретатор. Первую строчку скрипта он не понимает и выдает ошибку. Но не страшно, это чисто визуальное неудобство. Подчистим за ним во второй строчке.
Далее пытаемся найти каталог с компилятором csc.exe и запускаем его.
Компилятор .Net Framework'a, csc в качестве аргумента принимает путь к файлу с исходником. В нашем случае исходник находится в теле bat-файла(строки 13–20). Текст bat-команд игнорируется, как комментарий(строки 1 и 11).
После работы компилятора, получаем исполняемый файл, который запускаем и удаляем после завершения его работы.
Работа bat-интерпретатора заканчивается на 10 строке (exit).

Этот подход работает на Vista/7 «из коробки» и на ХР, с установленным .Net Framework.
Целесообразность, конечно, сомнительная. Так, just for fun.

http://habrahabr.ru/blogs/net/107659/#habracut