2016-06-29 9 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#コード:このバッチファイルは2つの部分から成ります。実行すると、コマンドシェルはエラー行としてc#-comments /**/を無視し、バッチコードのみを実行します。バッチブロックの終了時に終了コマンドを実行すると、実行は決してC#コードに到達しません。
ファイルのバッチ部分がcsc.exe(.NETコンパイラ)を検索します。見つけた後、バッチファイルはcsc.exeに入り、c#コードをコンパイルします。コメント(/ *と* /)により、バッチ部分は無視され、c#部分のみがコンパイルされます。コンパイル後、.exeファイルが実行され、実行後に削除されます。

2> nul2> nul標準エラー(ディスクリプタ2)をnullにリダイレクトして、 'not-found'メッセージを抑制します。

+1

バッチファイルを起動するたびに '/ * 'が内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されないことがあります:p – Nyerguds

+1

@Nyerguds私は' cls'と思われますそれを世話してください:p – Stephan

+0

@Nyergudsそれは私にうまく働いています。 – Exerion

1

バッチコードをコメントアウトすることはできますが、コメントがバッチでエラーとして処理されることは避けられません。

エラー自体は抑止できますが、少なくとも最初の行が表示されます。

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

C#はファイルの最初の文字として:@の文字のいずれかを受け入れないようだと、私は完璧なソリューションのための可能な方法を見ることはできません。

関連する問題