[前の記事]« 特定のサービスの終了・確認のバッチ処理
[次の記事]保存場所によって実行されないバッチ? »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「NET VIEW」索引へ

「コマンドは正常に終了しました」を防ぐには

415.
コマンドは正常に終了しました を防ぐには
2004年04月19日(月) 18時33分
たま
"ABC-D1"で始めるコンピュータ名のPCに特定処理をするバッチを書いています。
net viewコマンドを実行したとき最後に出力される「コマンドは正常に終了しました」
の文句のせいで、バッチ実行の最後で「コマンドの構文が誤っています。」と出てしまいます。
これを防ぐ手段はないでしょうか?

ーーーーーーーーーーー
@for /f "skip=3" %%i in ('net view') Do @Call :GetName %%i
@:GOTO :End

@:GetName
 @Call :Chk1 %1
 @If "%Computer%"=="NULL" goto :EOF
ここにやりたい処理を書く。
@GOTO :EOF

@:Chk1
 @Set Computer=NULL
 @Set InRec=%1
IF "%InRec:~0,8%" == "\\ABC-D1" @Set Computer=%InRec%
@Goto :EOF

@:End 
416.
Re:コマンドは正常に終了しました を防ぐには
2004年04月19日(月) 21時49分
じゃく
こんばんは。

>net viewコマンドを実行したとき最後に出力される「コマンドは正常に終了しました」
>の文句のせいで、バッチ実行の最後で「コマンドの構文が誤っています。」と出てしまいます。
>これを防ぐ手段はないでしょうか?

このように修正すればいいのではないでしょうか?
サブルーチン chk1 で行っていることを find コマンドに
代行させてその結果を使用する案です。

@for /f %%i in ('net view ^| find "\\ABC-D1"') Do @call :GetName %%i
@:GOTO :End

@:GetName
@set Computer=%1
ここにやりたい処理を書く。
@GOTO :EOF

@:End 
418.
Re:コマンドは正常に終了しました を防ぐには
2004年04月19日(月) 22時42分
oo
>"ABC-D1"で始めるコンピュータ名のPCに特定処理をするバッチを書いています。
>net viewコマンドを実行したとき最後に出力される「コマンドは正常に終了しました」
>の文句のせいで、バッチ実行の最後で「コマンドの構文が誤っています。」と出てしまいます。
>これを防ぐ手段はないでしょうか?

>ーーーーーーーーーーー
>@for /f "skip=3" %%i in ('net view') Do @Call :GetName %%i
>@:GOTO :End

>@:GetName
> @Call :Chk1 %1
> @If "%Computer%"=="NULL" goto :EOF
>ここにやりたい処理を書く。
>@GOTO :EOF

>@:Chk1
> @Set Computer=NULL
> @Set InRec=%1
>IF "%InRec:~0,8%" == "\\ABC-D1" @Set Computer=%InRec%
>@Goto :EOF

>@:End 

ロジックにおかしい点は無いようですが、まずいのが2行目の @:GOTO :End です。これはGOTO文でなく、GOTOという名前のラベル定義行になりますので、実行されず、1行目のfor文が終了した次には、Call :Chk1 %1 が実行されますが、この場合%1はGetNameというサブルーチンの引数でなく、このBATスクリプト全体の引数なので、空でしょう(何でも良いから引数をつけてBATを実行するとエラーにならない)。従って、Chk1の中で、InRecは未定義変数になり、次のIF文がエラーになります。
「コマンドは正常に終了しました」の文言はChk1で正しく除外されてます。
IF でエラーが起こったのでここだけ@をはずしたんでしょうけど、全文の@をはずして、1行目の@echo offの有無でデバッグすべきでしたね。そうするとGOTOが効いてない事がわかったはずです。

IFのエラーの原因の説明はちょっと難しいのですが、
IF "~0,3InRec という表示が出たと思います。

IF "%InRec:~0,8%" == "\\ABC-D1" @Set Computer=%InRec% は、
InRecが未定義の場合、%InRec: までが空に展開され、~0.8の文字列はそのまま残ります。次の%" == "\\ABC-D1" @Set Computer=%という%から%までが長い変な名前の未定義変数名と見なされてこれも空に展開されます。次のInRecはそのまま残ります。最後の%は対応する閉じ%が無いので単に消えます。結果的に、IF "~0,3InRec という不正なIF文になってしまいます。
"%InRec:~0,8%" のような機能を使う場合は事前に未定義でないことをIF DEFINED InRec などで調べる必要があります。
419.
Re2:コマンドは正常に終了しました を防ぐには
2004年04月19日(月) 22時48分
oo
ooです。
すいません、いまの投稿、一部で、0,8 を 0,3 とタイプミスしてます。
削除再投稿しようかと思いましたが、面倒だし自明なミスなのでこのままにしておきます。
 
 


カテゴリー「NET VIEW」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2004年04月19日 14:42に投稿されたエントリーのページです。

ひとつ前の投稿は「特定のサービスの終了・確認のバッチ処理」です。

次の投稿は「保存場所によって実行されないバッチ?」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート