タグ: バッチ

「管理者として実行」するバッチファイルに括弧をつけてはいけない

以前のネットワーク設定を変更するバッチファイル。
管理者権限で実行する必要がある。

しかし、「管理者として実行」で実行しても動いている様子がない。
単なるダブルクリックで一般ユーザとして実行すると動いている。(pauseを入れて確認)

管理者としてコマンドプロンプトを開いてバッチファイルを実行すると、確かに動くことから、構文エラーではない。

色々調べて分かったのは結局ファイル名だった。
ファイル名に括弧をつけてhoge(test).batのようにしていたのが原因。
カッコを外して管理者として実行したら何の問題もなく実行できた。

参考にしたサイト
“(“を含むパス上にあるbatファイルを、「管理者として実行」で正常実行できない

管理者として実行する場合と普通に実行する場合で、コマンド実行時の引数のファイル名をそのまま扱うか、クォーテーションで囲って扱うかの違いがあるようだ。もちろんそれが”仕様”である。

まあバッチファイルにはカッコを付けないようにしておくのが吉だ。

バッチファイルの文字コードに引っ掛かる

IPアドレスを変更するのにコマンドを使うことにした。
netshコマンドで変更できる。



固定IPアドレスの場合(管理者として実行)
netsh interface ipv4 set address “<インターフェイス名>” static <IPアドレス> <ネットマスク> <ゲートウェイ>

IPアドレスだけ変更したかったのでサブネットマスクとゲートウェイを何も書かなかったらブランクで上書きされたので注意。変更なくても同じ値を指定しよう。

それで問題はここからで、
上記netshをバッチファイルにした。が、何度やっても反映されない。
構文が間違っているかと思って、直接コマンドプロンプトで実行すると正しく反映された。

かなり調べて結局バッチファイルの文字コードがSJISでないために、インターフェイス名が正しく認識されず文字化けしていた。(windows10なら通常”イーサネット”のはず)
ちなみにこれはバッチファイルのお約束の@echo offを外してやっとわかった。
ネットワークアダプターの名前が日本語なのでこんな問題が起きたが、アダプタ名が英語なら当然問題なかった話ではある。

Powered by WordPress & Theme by Anders Norén