Powershell: 文字列を数値に変換する

OK、私は初心者で、この件で迷っています。

WMIからいくつかのドライブデータを取得しているアレイがあります。

$drivedata = $Drives | select  @{Name="Kapazität(GB)";Expression={$_.Kapazität}}

このアレイには以下の値があります(2台のドライブ)。

@{Kapazität(GB)=1.500} @{Kapazität(GB)=1.500}

で、1.500を1500という数字に変換したいだけです。

ここで見つけた様々な提案を試してみましたが、うまくいきませんでした。

-Replace ".",""と[int]は動作しません。 regexが正しいのかどうか、またどのようにすればよいのかわかりません。

お手数ですが、よろしくお願いいたします。

文字列を単純に int にキャストしても、確実には動作しません。そこで、文字列を int32 に変換する必要があります。そのためには,.NETのconvertクラスとそのToInt32メソッドを利用することができます。このメソッドでは、主な入力として string ($strNum) と、変換先の数値システムとして base number (10) を必要とします。これは,10進法(基数が10)だけでなく,例えば2進法(基数が2)にも変換できるからです。

この方法を試してみてください。

[string]$strNum = "1.500"
[int]$intNum = [convert]::ToInt32($strNum, 10)

$intNum
解説 (2)

このトピックは検証された解決策を受け取っていないので、あなたが解決策を求めたと思われる2つの問題に対して、私は簡単な解決策を提供することができます。

1.値が文字列の場合、"."の置き換え

文字列クラスには、更新したい文字列オブジェクトに対応するreplaceメソッドが用意されています。

$myString = $myString.replace(".","") 

2.文字列の値を整数に変換する

system.int32クラス(powershellでは単に[int])には、"TryParse"というメソッドが用意されており、文字列が整数であるかどうかを示すブール値を返すだけでなく、trueを返した場合には整数の値を既存の変数に参照して返すことができます。

[string]$convertedInt = "1500"
[int]$returnedInt = 0
[bool]$result = [int]::TryParse($convertedInt, [ref]$returnedInt)

これで、あなたが最初に質問した問題が解決したと思います。

解説 (1)

問題は、"-f ($_.Partition.Size/1GB)}}" MB単位の値が必要な場合は、1GBを1MBに変更してください。

解説 (0)