2016-06-29 16 views

답변

2

예, 가능합니다.

Example.bat

/* 2> nul 
@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 Program 
{ 
    static void Main() 
    { 
     System.Console.WriteLine("Hello, World!\r\nI am at " + System.Environment.Version); 
    } 
} 

설명 :
여기서 예는 먼저 회분식 코드 및 보조는 C# 코드이 배치 파일을 두 부분으로 구성된다. 실행 중 명령 셸은 오류 라인으로 C# -comments /**/을 무시하고 일괄 처리 코드 만 실행합니다. 배치 블록 끝의 만료 명령은 실행이 C# 코드에 도달하지 않습니다.
파일의 일괄 부분이 csc.exe (.NET 컴파일러)을 검색합니다. 찾은 후 배치 파일은 csc.exe으로 전달되어 C# 코드를 컴파일합니다. 주석 (/ * 및 * /)으로 인해 batch-part는 무시되고 C# 부분 만 컴파일됩니다. 컴파일 후 .exe 파일이 실행되고 실행 후 삭제됩니다.

편집 : 2> nul 리디렉션 표준 오류 (설명 2) '- 찾을 수 없습니다'라는 메시지를 억제하는 null로.

+1

배치 파일을 시작할 때마다'/ * '가 내부 또는 외부 명령, 실행 가능 프로그램 또는 배치 파일로 인식되지 않습니다. : p – Nyerguds

+1

@Nyerguds'cls'가 생각됩니다 그것을 처리하기 위해서 : p – Stephan

+0

@Nyerguds 그것은 나에게 잘 작동하고있다. – Exerion

1

배치 코드를 주석으로 처리 할 수 ​​있지만 오류로 배치에서 처리되는 것을 피할 수는 없습니다.

오류 자체를 억제 할 수 있지만 적어도 첫 번째 줄이 표시됩니다.

/* 2>NUL 
@echo off 
... 
start the C# code 
*/ 
... 
C#-Code 

C 번호는 파일의 첫 번째 문자로 :@ 문자 중 하나를 허용하지 않는 것, 나는이 완벽한 솔루션을위한 가능한 방법을 볼 수 없습니다.