アプリ版:「スタンプのみでお礼する」機能のリリースについて

hosts に 記載がなければ追加するバッチを作りたいと思います。
以下のように書くとバッチを流すたびに追加されてしまうのですでにあれば書かないようにしたいです。DNSには書けないのでHOSTSで対応したいです。設定時にミスで数度流しても最初以外は視されるようにならないでしょうか?

対象OSは WindowsXP,2000です。

バッチ内容
TYPE HOSTSCOPY.TXT >> %systemroot%\system32\drivers\etc\host

HOSTSCOPY.TXTの内容
ipアドレス host名

A 回答 (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/511fi …
http://f32.aaa.livedoor.jp/~kobun/index.php?CMD. …
    • good
    • 0

>設定時にミスで数度流しても最初以外は視されるようにならないでしょうか?



最初にデフォルトの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名」を一行として処理させるためです。

質問の意図が違っていたらごめんなさい。
あと実際に試していないので細かいところでシンタックスエラーになるかもしれませんが、これもご容赦ください。
    • good
    • 0
この回答へのお礼

返事が遅くなり申し訳ありません。
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: 開くことができません (ホスト名)

お礼日時:2009/01/13 18:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています