Windowsのsetコマンドでの小数の問題と解決方法

このQ&Aのポイント
  • Windowsのバッチファイル内で使うsetコマンドの小数の問題が発生しています。具体的には、小数点以下の「.0」を付けると正しく表示されない現象が起きています。
  • これは、setコマンドが小数を扱う際に整数として解釈してしまうためです。解決策としては、setコマンドを使わずに小数を比較する方法や、小数点以下の「.0」を付けずに比較する方法があります。
  • 具体的な解決方法としては、小数を扱うための専用のプログラミング言語やツールを使用することが考えられます。例えば、PythonやJavaScriptなどの言語を使えば、小数の比較や計算が容易に行えます。
回答を見る
  • ベストアンサー

Windowsのsetコマンドでの小数の問題

Widnowsのバッチファイル内で使うsetコマンドの小数の問題で悩んでいます。 例えば、以下の線内の様なバッチファイルを実行したとします。 「2.0」以上の数値であれば、その数値を表示するというものです。 ------------------------------ @echo off if 1.0 GEQ 2.0 echo 「1.0」 if 2.0 GEQ 2.0 echo 「2.0」 if 3.0 GEQ 2.0 echo 「3.0」 if 4.0 GEQ 2.0 echo 「4.0」 if 5.0 GEQ 2.0 echo 「5.0」 if 6.0 GEQ 2.0 echo 「6.0」 if 7.0 GEQ 2.0 echo 「7.0」 if 8.0 GEQ 2.0 echo 「8.0」 if 9.0 GEQ 2.0 echo 「9.0」 if 10.0 GEQ 2.0 echo 「10.0」 if 11.0 GEQ 2.0 echo 「11.0」 if 12.0 GEQ 2.0 echo 「12.0」 if 13.0 GEQ 2.0 echo 「13.0」 if 14.0 GEQ 2.0 echo 「14.0」 if 15.0 GEQ 2.0 echo 「15.0」 if 16.0 GEQ 2.0 echo 「16.0」 if 17.0 GEQ 2.0 echo 「17.0」 if 18.0 GEQ 2.0 echo 「18.0」 if 19.0 GEQ 2.0 echo 「19.0」 if 20.0 GEQ 2.0 echo 「20.0」 if 21.0 GEQ 2.0 echo 「21.0」 if 22.0 GEQ 2.0 echo 「22.0」 if 23.0 GEQ 2.0 echo 「23.0」 if 24.0 GEQ 2.0 echo 「24.0」 if 25.0 GEQ 2.0 echo 「25.0」 if 26.0 GEQ 2.0 echo 「26.0」 if 27.0 GEQ 2.0 echo 「27.0」 if 28.0 GEQ 2.0 echo 「28.0」 if 29.0 GEQ 2.0 echo 「29.0」 if 30.0 GEQ 2.0 echo 「30.0」 if 31.0 GEQ 2.0 echo 「31.0」 pause ------------------------------ 上記を実行すると、何故か「10.0」から「19.0」までの結果が表示されません。 小数点以下「.0」を付けないとうまく表示されます。 この原因は何で、どうしたら解決するのでしょうか。 また、setコマンドでは解決できない場合、setコマンドを使わずに同様の事をする方法はあるでしょうか。 ご存知の方がおられましたら、お教え頂けないでしょうか。

  • kon77
  • お礼率97% (92/94)

質問者が選んだベストアンサー

  • ベストアンサー
  • Cupper-2
  • ベストアンサー率29% (1342/4565)
回答No.1

バッチファイルでは実数(小数点を含む数値)をそのまま扱うことはできません。 一度文字列として展開し小数点を取り除いた値の桁合わせを行ったのちに比較してはいかがでしょう。

kon77
質問者

お礼

ご回答、ありがとうございます。 やはり、その様な処理をしないといけないのですね。 よく分かりました。やってみます。ありがとうございました。

kon77
質問者

補足

無事に目的の処理を書く事が出来ました。ありがとうございました。 あと、「setコマンド」とタイトルに入れましたが、本文のバッチファイルの例で、setコマンドを使っていませんでした。 実用しているバッチファイルではsetコマンドを使っているのですが、本文を書く際に、見やすい記述に変えようと思い、うっかり消してしまいました。失礼しました。 ですので、これはWindowsのコマンドプロンプトの仕様と思った方がいいのかも知れませんね。 大変助かりました。本当にありがとうございました。

関連するQ&A

  • WindowsのRANDOM関数を用いたバッチファイル

    お世話になります。 以下のようなバッチファイルを作成しました。 ----------------------- @echo off SET RND=%RANDOM% echo %RANDOM% pause ----------------------- 期待する動きとしては、バッチの実行時に毎回0~32767の 乱数のいずれかが表示されてほしいのですが、9012,9020,9023,9026のように微増していく数字が表示され、とても乱数とはいえない状態です。 ちょっとした思い違いなのかもしれませんが、行き詰まってしまっています。DONコマンド,バッチに詳しい方、ご教授ください。

  • DOSのECHOコマンドで > を表示させたい

    DOSでバッチファイルを組んでいます そこで ECHOコマンドで > を表示させたいのですが 具体的には ECHO > と打っているんですがコマンドの構文が間違っていますと出ます おそらく実行結果をファイルにするときの > になってしまっているのだと思います ECHOで > を表示させる方法は無いでしょうか? 知っている方いればお願いします

  • 2つ目の「pause」は無効?

    DOSコマンドの「pause」について質問です。 -- test1.bat pause echo ああああ pause -- このようなバッチファイルを実行したときに 2つ目のpauseでは処理ストップしないようです。 # 3つ目を追加すると同様の動作をするようです。 # -- test2.bat # pause # echo ああああ # pause > NUL # pause # -- これってpauseコマンドのバグでしょうか?

  • VERコマンド実行結果を変数にセットしたい

    VERコマンドを実行すると次の様に表示されます。 C:\>ver Microsoft Windows [Version 6.0.6002] VER 質問:VER実行結果の「Microsoft Windows [Version 6.0.6002]」を、 変数「A」にセットしたいのですが、 そのコードを教えて下さい。 最終目的は、「6002」を表示させたいのですが良い方法があればご教授ください。 set V="%A:~31,4%" echo %os% pause

  • コマンドプロンプトで最新のファイル以外を削除

    コマンドプロンプトで最新のファイルを2つ残してそれ以外を削除するバッチを作りましたがうまくいきません。お詳しい方、どこが間違っているのかアドバイスお願いいたします。 set /a cnt=0 for /f %%A in ('dir /B /O-D c:\test1\*.log') do ( call :chk %%A ) :chk REM カウンタが2以上なら削除 if %cnt% GEQ 2 ( echo %1 ) set /a cnt+=1

  • For文のtokensにおけるバッチファイル作成について

    はじめまして。 バッチファイルにて以下のコマンドを作成して 実行したのですがきちんと実行されません。 コマンドプロンプトを起動して1個1個実行するときちんと 実行されます。どういうことなのでしょうか? <バッチファイル> @echo off cd /d デスクトップ for /F "tokens=2" %i in ( file.txt ) do echo %i >> result.txt pause <file.txtの中身> 1<tab>2<tab>3 4<tab>5<tab>6

  • FTPコマンドを非表示にする

    バッチファイルでテキストファイルを読み込む形でFTPコマンドを実行させて、FTPサーバーからデータをダウンロードさせるのですが、ファイル数が多い為、コマンドが数秒間表示され続けてしまいます。これを非表示にするにはどのようにすればいいですか? バッチでは頭に@ECHO OFFをつけましたが、頭の一行しか非表示にならず、テキストファイル以降に書かれたコマンドは表示されてしまいます。 宜しくお願いします。

  • コマンドプロンプトのバッチファイル実行までの速度

    コマンドプロンプトのバッチファイルを作成したのですが このバッチファイルの実行するまでの処理速度を、コマンドプロンプト上に表示させたいのですが、どのようなコマンドを組めばよいのでしょうか? ちなみにバッチファイルの中身は、 @echo off start http://www.yahoo.co.jp です。よろしくおねがいします。

  • Windows2000 バッチファイルコマンドについて

    こんにちは。 バッチファイルコマンド(DOSコマンド?)について質問があります。 まずやりたい事としては、 「前月日付のフォルダを自動作成したい」 です。 当月日付をもってくる為には以下の様なコマンドでできました。 for /f "tokens=1-2" %%l in ('date /t') do set today=%%l for /f "delims=/ tokens=1-2" %%a in ('echo %today%') do set yymm=%%a%%b このコマンドを実行すると、例えば、%yymm%には200507が入っています。 このコマンドを応用して、前月日付(200506)を取得したいのですが、何か言い方法はありませんでしょうか? また、新たなやり方あるのでしたら教えて頂けないでしょうか?

  • コマンドラインの設定がおかしくなってしまって

    コマンドラインの設定がおかしくなってしまって 一部のバッチとvbsが動かなくなってしまいました・・・ 何かの拍子で設定が変わってしまったのかvbs等で変わったのか分かりませんが・・・ @echo "%~dpn1" pause と言う単純なバッチを組みドラッグしら通常 @echo "%~dpn1"は そのファイルを表示するのですが表示は""となってしまってて最初ソースがおかしいのかと思っていたのですがどうもそのPCの設定が変わっただけ見たく 他のpcで試したらちゃんとエコーを返したようなのです 挙動から見てエコーで""と成っているだけでなく実際にそのパスとファイル名等が入らないようです どういう部分がおかしくなったと思いますか? 一応戻れる所まで戻って最近インストールした物も消してみたんですが どうも治らないみたいです・・・ osは一応 xpsp3です。

専門家に質問してみよう