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

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

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

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

2回答

10035閲覧

DOSコマンドで、小数点を含んだ数値を比較演算したい

ShunSambe

総合スコア11

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2015/09/11 06:06

現在、Windowsのバッチファイルのデバッグをしています。

SQL Serverのデータベースオブジェクトの使用率を取得して、閾値を超えている場合に
エラーをイベントログに書き込む処理をするバッチについて、使用率が小数点含んだ
数値となっているため、比較演算処理が正しく行えていないことまではわかりました。

小数点を含んだ数値を、比較演算するためには、どのようにすればよろしいでしょうか。

事情があり、詳しくはコードを公開できないのですが、
SQL ServerにDB使用率を取得しに行き、
取得した値をCOL1にSETしてから、

if %COL1% gtr 85 (
eventcreate /SO DBFileUseRate /L application /T ERROR /id 999 /d "データベースファイル %COL1% は使用率85%を超えています。使用率(%):%COL1%。"
)

上記のように、85%を超えていればイベントログに書き込む処理をしたいわけです。
ですが、COL1の値が小数点が含まれており、数値として比較演算できていないようです。

どういった対応をすればよいか、ご教示頂けると大変助かります。

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

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

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

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

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

guest

回答2

0

こんばんは。

既に「解決済」のステータスですが、整数部と小数部に分けるような記述が出来れば比較演算が可能と思いましたので、投稿をさせて頂きました。

以下、小数点で文字列(COL1)を分解するコードです

BAT

1SET TEMP=%COL1% 2SET VALUE_U= 3SET VALUE_L= 4 5:LOOP 6SET VALUE_U=%VALUE_U%%TEMP:~0,1% 7SET TEMP=%TEMP:~1% 8IF NOT "%TEMP%"=="" IF NOT "%TEMP:~0,1%"=="." GOTO LOOP 9 10IF NOT "%TEMP%"=="" ( 11 SET VALUE_L=%TEMP:~1% 12)

VALUE_Uが整数部、VALUE_Lが小数部になっています。
「87」や「87.」、「87.6」の場合はVALUE_Eが空になります。
あと、COL1が空や整数部が存在しないケースには対応したコードになっていません。

「.123」のような形はNG

また、別の方法ですが
もしもpowershellがインストールされている環境であれば、以下のような事も可能と思います。

BAT

1FOR /F %%i in ('powershell -Command "& { if ( $Args[0] -gt $Args[1] ) { echo $true } else { echo $false } } %COL1% 85"') do SET RET=%%i 2 3IF %RET%==True ( 4 eventcreate ... 5)

引数にCOL1と85を与えて、1つ目の引数(COL1)の方が大きければtrueを返しています。
ただ、速度的にはワンテンポ遅くなる感覚なので使う状況次第と思います。

投稿2015/09/11 09:29

sgr-2

総合スコア294

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

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

0

自己解決

SQL Serverから値を取得する際に、CEILINGで繰り上げることで対応としました。

投稿2015/09/11 07:50

ShunSambe

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問