回答
您是否在尋找M
== MB
或M
== 1E6
?如果是前者,PowerShell的理解KB,MB,GB和TB例如: -
C:\PS> Invoke-Expression "2MB"
2097152
大告誡這裏Invoke-Expression
,如果你得到來自用戶,文件,即不受信任來源的字符串。你必須小心執行它。假設字符串是"2MB; Remove-Item C:\ -Recurse -Force -Whatif -EA 0"
,那麼在該字符串上使用Invoke-Expression
會有糟糕的一天。順便說一句,我在這裏很好,加入了-Whatif。 :-)
如果是後者,你可以做一個正則表達式-replace後跟一個強制例如:爲十億
C:\PS> [long]("3.34 B" -replace '(\d+)\s*(B)','$1E9')
3340000000
謝謝基思。我是後一種情況,這個「替換」很好。 :) –
沒有什麼內置支持像中號後綴萬元,B,等等。只有對「文件大小」後綴的內置支持,例如32KB -> 32768
這是我在基本腳本版本中解決您的問題的嘗試。如果需要,它支持多字符後綴,或根本不支持後綴。它總是會返回一個[int]
,所以請注意溢出(例如,5.5B
會導致錯誤,因爲它不適合int)。您可以稍微修改一下類型以支持更大的數字。
function ToNumber
{
param([string] $NumberString)
# add other multiplier suffixes to this table
$multipliers = @{ 'B' = 1000000000; 'M' = 1000000; 'K' = 1000; '' = 1 }
switch -regex ($numberString)
{
'^(?<base>[\d\.]+)(?<suffix>\w*)$'
{
$base = [double] $matches['base']
$multiplier = [int] $multipliers[$matches['suffix']]
if($multiplier)
{
[int]($base * $multiplier)
}
else
{
throw "$($matches['suffix']) is an unknown suffix"
}
}
default
{
throw 'Unable to parse input'
}
}
}
C:\> ToNumber '1.7B'
1700000000
C:\> ToNumber '1.7K'
1700
downvoter會照顧自己解釋嗎? – latkin
引用Chuck Berry - 「不是我」。 :-) –
謝謝拉金。你的功能比我的功能更復雜。順便說一句,這不是我。 :) –
- 1. 將字符串或字符串數組傳遞給Powershell中的函數
- 2. 字符串函數
- 3. 字符串函數
- 4. 字符串函數
- 5. 字符串函數
- 6. 字符串函數
- 7. 字符串子字符串函數
- 8. 數組值到字符串函數
- 9. 從字符串到整數函數
- 10. Powershell - 語法錯誤 - 將字符串從函數粘貼到「-Filter」
- 11. 以逐字字符串形式的PowerShell函數調用
- 12. 錯誤:「net.sf.sahi.plugin.DBClient」的Java構造函數帶有參數「字符串,字符串,字符串,字符串」未找到
- 13. 數字函數返回字符串
- 14. 將字符串數組傳遞給PowerShell函數
- 15. 如何驗證允許空字符串的PowerShell函數參數?
- 16. 格式數字字符串到另一個數字字符串
- 17. 將字符串添加到字符串的數字和數字
- 18. 字符串與函數字符
- 19. 從函數返回字符[] /字符串
- 20. JSON字符串到字符串數組
- 21. 讀字符數組一字一字無字符串函數
- 22. Java - 字符串到數字
- 23. 從字符串到數字
- 24. ORACLE - 字符串到數字
- 25. 字符串到數字
- 26. Elisp拆分字符串函數來拆分字符串。字符
- 27. C映射字符串到函數
- 28. Node.js Mongoose.js字符串到ObjectId函數
- 29. SQL Server字符串到表函數
- 30. 將函數映射到字符串
由於您的示例中'M'和'B'不符合任何行業標準,因此沒有標準庫或函數。你可以自己寫一個函數來做到這一點。 – EBGreen