質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

1回答

2141閲覧

バッチファイルで一定時間反応がないと次の処理に進みたい

satsukichan

総合スコア52

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2019/02/20 09:20

#環境

  • Windows10
  • batファイル

やりたいこと

ネットワーク越しにhostsファイルに追加したい。
反応がない端末はスキップして次の端末に移りたい。
for分の中に以下の処理を入れております。

for /f %%a in (C:\Users\xxxxxx\Desktop\hostslist) do ( echo 192.168.x.x. 〇〇〇.local >> \%%a\c$\Windows\System32\drivers\etc\hosts

hostlist

11.1.1.1 22.2.2.2 33.3.3.3 4・・・・

上記のような構成の場合例えば例えば「3.3.3.3」が疎通負荷の場合にそこでバッチが止まってしまいます。
echoでhostsファイルに書き込む挙動の際に一定時間反応がなければ次の行に進むような処理を入れることは難しいでしょうか?

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

手抜きとしては、pingが通らないときだけスキップする。

CMD

1for /f %%a in (C:\Users\xxxxxx\Desktop\hostslist) do ( 2 ping -n 1 %%a | findstr TTL= >NUL 3 if not ERRORLEVEL 1 echo 192.168.x.x. 〇〇〇.local >> \%%a\c$\Windows\System32\drivers\etc\hosts 4)

#追記
ちょっと、上手く行くかどうかわかりませんが、net view \~~が2秒以内に終わらない場合だけスキップします。

CMD

1for /f %%a in (C:\Users\xxxxxx\Desktop\hostslist) do ( 2 start /min net view \%%a 3 timeout 2 >NUL 4 taskkill /im net.exe /f >NUL 2>NUL 5 if ERRORLEVEL 1 echo 192.168.x.x. 〇〇〇.local >> \%%a\c$\Windows\System32\drivers\etc\hosts 6)

startで、別のウィンドウが開いて、自動的に閉じます。

投稿2019/02/20 13:07

編集2019/02/20 14:13
otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satsukichan

2019/02/20 23:55

回答ありがとうございます。 まずPINGですが疎通が取れても取れなくてもPING自体が実行されるとERRORLEVELは0になるので時間の短縮になりません。 またnet viewの方も同様に時間がかかりました。
otn

2019/02/21 00:24 編集

> PING自体が実行されるとERRORLEVELは0になるので ping 自体の ERRORLEVELは0なので無視して、その出力に対する findstr のERRORLEVELを見ます。私のコードは見てないのでしょうか? > またnet viewの方も同様に時間がかかりました。 2秒も待てないと言う事でしょうか?「一定時間反応がないと」って、何秒の事?
satsukichan

2019/02/21 03:26

すいません速度についてはPINGのやり方でうまくいきました。当初何故か時間が以上にかかり質問した次第です。ありがとうございます。 ただし質問の趣旨とはずれますがfindstrを入れようがいれまいがERRORLEVELは0になります。 宜しくお願い致します。
otn

2019/02/21 06:16 編集

もしかして、forループの内側で、echo %ERRORLEVEL% しましたか? それは駄目です。forループ開始前に%ERRORLEVEL%がforループ開始直前の変数の値で置換されます。 forループ内で変数の値を見たければ、1行目に setlocal enabledelayedexpansion と入れて、 echo !ERRORLEVEL! と書いてください。これだと、echo実行時点の変数の値がわかります。
satsukichan

2019/02/22 10:33

遅くなってすいません。 ご指摘どおりでした。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問