• 締切済み

hosts に 記載がなければ追加するバッチ

hosts に 記載がなければ追加するバッチを作りたいと思います。 以下のように書くとバッチを流すたびに追加されてしまうのですでにあれば書かないようにしたいです。DNSには書けないのでHOSTSで対応したいです。設定時にミスで数度流しても最初以外は視されるようにならないでしょうか? 対象OSは WindowsXP,2000です。 バッチ内容 TYPE HOSTSCOPY.TXT >> %systemroot%\system32\drivers\etc\host HOSTSCOPY.TXTの内容 ipアドレス host名

みんなの回答

回答No.2

#1です。 補足します。 >FINDSTR: 開くことができません とのメッセージで追加されません。 上記ですがFINDSTRの基本構文は コマンド   オプション   引数 (FINDSTR)  検索文字列  (ファイルなど) です。 ですので「FINDSTR 144.1.70.203 pdms C:\WINNT\system32\drivers\etc\hosts」はオプションが「144.1.70.203」となり、引数に「pdms」がわたってしまったために、「pdms」というファイルがない=開くことができません、と怒られているのだと思います。 その為空白文字を含んでの検索は/C:オプションを使い二十引用符でくくります。 /C:オプションを使わず二重引用符でくくった場合はOR検索になります。 その他、FOR文を使うのでERRORLEVEL取得時に遅延環境変数も視野に入れないといけません。 なんだかんだといっても私の教え方の問題でした^^; 動確が取れたスクリプトを下記に記載しますので参考にしてください。 わからないことがあったらまた補足してください。 ***ここから**************************************** @ECHO OFF setlocal enabledelayedexpansion REM 変数の設定 SET HOSTS_FILE=%systemroot%\system32\drivers\etc\hosts SET ADD_HOSTS_FILE=C:\HOSTSCOPY.TXT REM hostsファイルの初期化 TYPE %HOSTS_FILE%_org > %HOSTS_FILE% REM hostsに記載がなければHOSTSCOPY.TXTの内容を追加する FOR /F "delims=," %%i IN (%ADD_HOSTS_FILE%) DO ( FINDSTR /C:"%%i" %HOSTS_FILE% > nul IF NOT !ERRORLEVEL! == 0 ( ECHO %%i>>%HOSTS_FILE% ) ) ECHO ***************************************************** ECHO hostsファイルは以下のように作成されました ECHO ***************************************************** ECHO. TYPE %HOSTS_FILE% ECHO. ECHO ***************************************************** PAUSE endlocal EXIT/B 0 *******************************************************ここまで*** 参考URL http://www.atmarkit.co.jp/fwin2k/win2ktips/511findstr/findstr.html http://f32.aaa.livedoor.jp/~kobun/index.php?CMD.EXE%A4%CE%C3%D9%B1%E4%B4%C4%B6%AD%CA%D1%BF%F4%A4%CE%C5%B8%B3%AB

回答No.1

>設定時にミスで数度流しても最初以外は視されるようにならないでしょうか? 最初にデフォルトのhostsファイルをバックアップしておいてはいかがでしょうか? COPY %systemroot%\system32\drivers\etc\host %systemroot%\system32\drivers\etc\host_org (GUIで事前に作業しても変わらない) これを初期の状態として TYPE %systemroot%\system32\drivers\etc\hosts_org > %systemroot%\system32\drivers\etc\hosts このようにバッチを流すたびに初期化します。 hostsファイルが初期化されたところで追加したいHOSTSCOPY.TXTの内容を反映させましょう。 実際のバッチの中身 --------------------------------------------------------------- @ECHO OFF REM 変数の設定 SET HOSTS_FILE=%systemroot%\system32\drivers\etc\hosts SET ADD_HOSTS_FILE=HOSTSCOPY.TXT REM hostsファイルの初期化 TYPE %HOSTS_FILE%_org > %HOSTS_FILE% REM hostsに記載がなければHOSTSCOPY.TXTの内容を追加する FOR /F "delims=," %%i IN (%ADD_HOSTS_FILE%) DO ( FINDSTR %%i %HOSTS_FILE% IF NOT %ERRORLEVEL% == 0 ( ECHO %%i>>%HOSTS_FILE% ) ) --------------------------------------------------------------- delimsを設定するのは追加項目である「ipアドレス host名」を一行として処理させるためです。 質問の意図が違っていたらごめんなさい。 あと実際に試していないので細かいところでシンタックスエラーになるかもしれませんが、これもご容赦ください。

drdrdrdr
質問者

お礼

返事が遅くなり申し訳ありません。 FINDSTR: 開くことができません とのメッセージで追加されません。 2000でもXPでも同じです。 何かヒントをお願いします。 FINDSTR 144.1.70.203 pdms C:\WINNT\system32\drivers\etc\hosts IF NOT 0 == 0 (ECHO ***.***.***.*** pdms 1>>C:\WINNT\system32\drivers\etc\hosts ) ) FINDSTR: 開くことができません (ホスト名)

関連するQ&A

  • hostsファイルを開きたいのですが・・・

    hostsファイルを見たいのですが、 「ファイル名を指定して実行」で、 「C:\WINNT\system32\drivers\etc\host」をしても、 「C:\WINNT\system32\drivers\etc\hostは利用できない場所を参照しています。このコンピューターのハード ドライブ上、またはネットワーク上を参照している可能性があります。インターネットやネットワークに接続しているかどうか確認してから、やり直してください。それでも、見つからない場合は、その情報は別の場所に移動した可能性があります。」 とでて、開けません。これは、どういうことなのでしょうか? そして、どうすれば開けますでしょうか? どうぞご教授ください。よろしくお願いします。

  • Hosts書き換え用バッチファイルの作り方・・・

    Hosts書き換え用バッチファイルの作り方・・・ お世話になります。 サーバのIPアドレス変更に伴い、数十台のPCのHostsファイルを書き換える必要があります。 具体的には、 SERVER1 192.xxx.xxx.xxx を削除し、 SERVER1 10.xxx.xxx.xxx を追加する という操作がしたいわけです。 ただし、これ以外の登録はPCにより色々ですので、あくまで現行のものを削除、差分を追加、という形にしたいのです。 手作業で行うのはあまりに大変ですので、Batファイルなどを作って必要な方に配布できたら・・・と思うのですが、削除→追加の書き方がわかりません。 ご教示いただけますと助かります。 宜しくお願いいたします。

  • hostsファイルについて

    はじめまして。ネットワークエンジニアの卵です。 ●http://www.atmarkit.co.jp/icd/root/11/5784411.htmlを読んでの質問です。このサイトでは、hostsファイルについて、次のように説明されています。 ================================================================  TCP/IPを使ったネットワークにおいて、あるノードのIPアドレスと、 そのノードを表わす分かりやすい文字列(別名)の対応を記録した ファイルのこと。  TCP/IPを実装したマシンでは、ほとんどの場合、このhostsファイルを参照して名前解決をすることができる。  hostsファイルの、OS別ディレクトリ位置  ・UNIX系のOSは、/etc/hosts  ・Windows 95/98では、C:\Windows\hosts  ・Windows NTではC:\Winnt\System32\Drivers\Etc\hosts ================================================================ 上記にあるように、MS-DOSプロンプトを起動し、 C:\Documents and Settings\computername>上記のディレクトリを試しましたが、全て失敗です。  いずれも、'内部コマンドまたは外部コマンド、操作可能な プログラムまたはバッチ ファイルとして認識されていません。’や、 ’指定されたパスが見つかりません。’等と表示されてしまいます。 hostsファイルとは標準装備されているものではないのでしょうか。 ちなみにOSは、WindowsXP home Edition です。 上記2点について長々と説明させて頂きましたが、ご回答お願いしす。 また、ネットワーク初心者でも、分かりやすくて丁寧なサイトがありましたらURLも教えて下さい。

  • hostsの役割

    よくネットワーク関係で C:\WINDOWS\system32\drivers\etc\hosts に記述するとかいわれますが, これってどんな効能があるのですか. わたしはWindowsXP(SP2)に付属のIIS5.1をいれてありますが 127.0.0.1 localhost と書かれています.

  • hostsで2つ目以降のエントリにPINGが通らない

    (※使用環境はWindows Server2003です) "C:\WINDOWS\system32\drivers\etc\hosts"の1つのIPに対して 以下のように複数のホスト名を定義しています。 172.16.xx.xxx host1 host2 host3 定義した当初や、しばらくはhost1,host2,host3のそれぞれを指定して pingを発行しても、問題は無かったのですが、ある日突然 host2,host3を指定してpingを発行すると以下のエラーが出るようになりました。 ---------------------------------------------------------------- >ping host2 Ping request could not find host host2. Please check the name and try again. >ping host3 Ping request could not find host host3. Please check the name and try again. ---------------------------------------------------------------- ★このとき、IP指定やhost1には従来通りpingが通ります。  DNS clientサービスも開始状態のままです。 端末を再起動すれば、host2,host3共にpingが通るようになるのですが、 およそ1週間程すればまたエラーになります。 最悪、hostsの定義を3行に分けて登録すれば回避できるかも知れませんが、 原因がわからない以上、絶対とは言えず困っています。 以上、つたない説明ですが、よろしくお願いします。

  • マシンの追加・ネットワーク接続

    既存のsolarisネットワークに新しいマシンを追加しました。ネットワークの設定を行いました。 しかし、外部およびネットワーク内のマシンにて、nslookup(追加したマシンのドメイン名)、nslookup(追加したマシンのIPアドレス) いずれを実行しても、server can't findと表示されてしまいました。 追加したマシン(マシン名:abc)に対しては以下のファイルを設定しています。 /etc/netmasks(追加マシンのIPアドレス 255.255.255.0)、 /etc/defaultrouter(ルータのIP)、 /etc/hosts(追加マシンのIPアドレス abc)、 /etc/nodename(abc)、 /etc/hostname.bge0(abc)、 /etc/resolv.conf(プライマリDNSのIP、セカンダリDNSのIP) /etc/nsswitch.conf(hostsの部分には、nis dns ここで、files dnsも試してみた) 追加したマシンにて、ifconfig -aを実行しても正しく表示が出ます。 また、追加したマシンにて、netstat -nrを実行しても結果はスムーズにエラーなしで表示されます。表示内容も問題ないと思います。 なぜ、nslookupで、server can't findエラーが出てしまうのでしょうか? 他に、設定の忘れがあるのでしょうか?例えば、DNSサーバー側での設定ファイルの変更など。

  • hostsファイルの編集

    自宅サーバ(linux)にドメイン名でxpからアクセスしています。 windowsの再インストールを行ったので、以前やったようにwindowsのhostsファイルを編集しました。(C:\WINDOWS\system32\drivers\etc\hosts) ところが、なぜかこのhostsファイルの編集をしてPCを再起動しても、ドメイン名で自宅サーバへのアクセス(IE,Firefox)ができません。 *プライベートIPならアクセス可 そこで、hostsファイルの内容が反映されているかを調べる方法があったら教えてください。 今のところ、hostsファイルの設定がうまく反映されていないように思うので・・・ よろしくお願いします。

  • Linux3台でDNS→/etc/hosts→目的のマシン

    今 3台のRedHatLinuxのマシンがあるとします 一台はDNSを使っていて グローバルIPにドメインが当てられています NICは二枚ざしで外と中に繋がっています 二台目は/etc/hostsだけ使っていて グローバルIPはありますがドメインは割り当てられていません NICは二枚ざしで外と中に繋がっています 最後は グローバルIPはありますがドメインは割り当てられていません NICが一枚の外に繋がっているマシンです 一台目のマシンは XXX.co.jp 二台目のマシンは green.XXX.co.jp 三台目のマシンは cat.XXX.co.jp となっています 現在 一台目のマシンのDNSによって green.XXX.co.jpは名前解決ができます 二台目のマシンの/etc/hostsによって cat.XXX.co.jpは cat.green.mediaplan.co.jpと greenのマシン上で設定してあります host.confでは order hosts,bind としてあります ですが 二台目ののマシン以外で cat.green.XXX.co.jpとしても 三台目のマシンに行き着くことができません どうすればこういうことができるのでしょうか? 二台目にDNSを入れればできるでしょうか? うまく表現できませんでしたが どうか教えてください 足りない事があれば補足いたします

  • windows2000で、hostsファイルを参照してくれない

     お世話になります。DNS切り替え前の動作確認で、hostsファイルを触っていますが、hostsに書いた所でない(正常な)アドレスを見に行ってしまいます(pingを打っても同じです)  下記の確認をしましたが、解決しませんでした。 ● C:\WINNT\system32\drivers\etcの、hosts ファイルと、lmhosts.samに ipアドレス(タブ)www.(アドレス)  の形式で記述しております。 ● レジストリ(DataBasePath)の値は書き換わっていません。 ● サービスDNS Clientは、開始されています。  他に確認する箇所 等ございましたら、ご教示いただけると助かります・・・

  • etc\hosts の設定が効かない

    Windows98で C:\Windows\system32\driversw\etc\hostsファイル内に IPアドレスとドメインを設定し、WEBサーバー上のデータを 閲覧したいのですが、うまくいきません。 hostファイル内の最後 IPアドレス localhost 以下に 閲覧したいサイトのIPアドレスと ドメインを入れて保存しましたが 出来ませんでした。 hostファイルの詳しい使い方をご存じの方、教えて下さい。