【发布时间】:2019-03-05 15:17:49
【问题描述】:
我正在尝试使用 PowerShell 将字符串转换为整数。然而,它一直告诉我我没有有效的号码,尽管我确定我有。
首先,这是我获取变量的方式,以及类型的打印输出等,以确保有效性:
$obj = (New-Object -TypeName PSCustomObject -Property @{
LastSaved = $com.GetDetailsOf($_, 155).toString().trim()
})
Write-Host $obj.LastSaved
$datePart,$b,$c = $obj.LastSaved.Split(" ")
Write-Host $datePart
$intVar,$b,$c = $datePart.Split("/")
$intVar = $intVar.Trim()
$intVar -replace '\W', ''
Write-Host $intVar
Write-Host $intVar.GetType()
输出:
5/26/2016 年 8:09 AM
2016 年 5 月 26 日
5
系统字符串
这是我尝试的第一种转换方法:
[int]$converted = 0
[int]::TryParse($intVar, [ref]$converted)
Write-Host $converted
还有输出:
错误
0
下一个方法:
$converted = [convert]::ToInt32($intVar, 10)
结果:
使用“2”个参数调用“ToInt32”的异常:“找不到任何可识别的数字。”
还有我试过的第三种方法:
$converted = $intVar / 1
结果:
无法将值“5”转换为类型“System.Int32”。错误:“输入字符串的格式不正确。”
如果我手动为 $intVar 分配“5”值 ($intVar = "5") 一切正常,所以我认为我如何获得该值肯定存在问题。但我不知道我做错了什么,因为GetType() 说它确实是一个字符串。
编辑:根据 TobyU 的回答,我也尝试过 $intVar = [int]$intVar,结果与
无法将值“5”转换为类型“System.Int32”。错误:“输入字符串的格式不正确。”
编辑:另一种方法:
$intVar = [int]::Parse($intVar)
这给出了:
使用“1”个参数调用“Parse”的异常:“输入字符串的格式不正确。”
编辑 3: 显然,正如一些评论者所提到的,存在无效字符。这是Format-Hex 的输出:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 3F 32 36 ?26
【问题讨论】:
-
我建议在你的字符串上使用
.Trim()来删除整数之前/之后的任何可能的隐藏字符。 -
@TheIncorrigible1 我更新了我的代码以尝试
.Trim()和-replace,结果相同(请参阅我的编辑)。 -
尝试将其发送至
Format-Hex以查看所有内容。正如其他人所提到的,显然某些东西是不可能存在的。 -
也可以考虑试试
-replace '[^\d]'(如果你只是删除,第二个参数是可选的) -
@Lee_Dailey 啊,我不知道那个方法。我已经用十六进制输出更新了问题。
标签: .net powershell type-conversion