CMD変更hostファイル


テストでは常にホストを変更する必要があるため、スクリプトで変更できます.
それぞれ2つのバッチ処理をして、1つの内網、1つの外網、使う時運転を切り替えます
cd/d %windir%\system32\drivers\etc  del hosts.bak//元のバックアップファイルを削除するren hosts hosts.bak//名前変更hostsファイルecho 1 0>hosts 1>nul 2>nul//新規hostsファイルecho 127.0.0.1*****.com>>hosts//必要なアドレスマッピングfor/f「eol=#tokens=1,2」%%i in(hosts.bak)do call:checkvalue%%i%%i%%j goto end//作成記録削除を探します:checkvalue echo%2|find/i"**.com"if%errorlevel==1(echo%1>>hosts)
=========================================
batスクリプトでは、前のコマンドの戻り値を%errorlevel%で表すのが一般的です.判断に使用します.例:
cmd1
if %errorlevel% == 1 (
    cmd2
)  // cmd1 1 , cmd2 

一般に、前のコマンドの実行結果から返される値は2つしかなく、0は「成功」、1は「失敗」を表し、実際にはerrorlevelの戻り値は0~2550の間であってもよい.
forループやif文の複数のコマンドが戻り値を取得する必要がある場合など、errorlevelを使用すると無効になり、2番目のコマンドからerrorlevelの値は変わりません.ここでは、バッチでの変数遅延の問題について、errorlevelが無効ではなく、errorlevel変数への参照は、変数遅延をオンにしていない場合のパーセント記号を使用します.
変数遅延の設定をオンにする:setlocal EnableDelayedExpansion、すなわち遅延環境変数拡張は、解釈器が複合文に遭遇したときに、1つの文として同時に処理するのではなく、1つの文として解釈することを教えます.しかし、この場合もパーセンテージ%で変数を参照するのは役に立たないので、感嘆符を使わなければなりません!例えば!errorlevel!.
  setlocal enabledelayedexpansion
  cmd1
  if !errorlevel! == 1 (
    cmd2
    echo !errorlevel!
  )