Использование C# в bat файле
На «Хабрахабре» выкладывали статью о создании *.bat файлов, выполняющих код на C#. К сожалению, ту статью почему-то удалили, но сам код у меня остался. Ниже его доработанная и исправленная версия:
/* @echo off && cls && echo Loading... && echo. 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" if "%csc%" == "" ( echo .NET Framework not found! && echo. && pause && exit ) %csc% /nologo /out:"%~dpnx0.exe" "%~dpnx0" if not "%ERRORLEVEL%" == "0" ( echo. && pause && exit ) cls "%~dpnx0.exe" %* del "%~dpnx0.exe" exit */ using System; class HelloWorld { static void Main(string[] args) { Console.ForegroundColor = System.ConsoleColor.Cyan; Console.Title = "Test application"; Console.WriteLine("Hello, World!\r\nI am at " + System.Environment.Version); int i = 0; foreach (string item in args) { Console.WriteLine(i+": "+item); i++; } Console.ReadKey(true); } }
Улучшения следующие:
- Сообщение о загрузке программы
- В случае ошибки компиляции cmd.exe не закрывается и показывает текст ошибки
- Программе можно передавать параметры
- Скрипт корректно запускается как при клике, так и вызове из командной строки, ярлыка и т.д.
Сначала идет код для командного интерпретатора Windows, а затем — код на C#. При запуске скрипт компилирует сам себя: cmd.exe выполняет код сверху, а компилятор C# видит этот код как комментарий. Поддерживается .NET Framework версий от 2.0 до 4.5. Последней версии в коде не указано, но так как 4.5 устанавливается в папку 4.0, всё работает.
Осталось теперь придумать зачем это надо. C# — не скриптовый язык, поэтому без IDE с автодополнением и подсказками очень неудобно.
Комментарии
Очень удобный подход для создания автоматизированных скриптов (реорганизация директорий или массовое переименование файлов). А главное, удобно написав в VS, поделиться с другом по почте. И запуская, не требовать права подтверждения администратора!