我是PowerShell的新手,我正试图从变量中提取一个数字。例如,我使用此命令获取端口列表: $ ports = [system.io.ports.serialport] :: getportnames()
$ ports的内容是:COM1,COM2,COM10,COM16等。
我想从$ ports中提取数字。我看了这个question。它做我想要的,但是从文件中读取。
请告诉我如何解决此问题。
感谢。
编辑:我能够按照以下方式做我想做的事情:
$port=COM20
$port=$port.replace("COM","")
但如果还有其他方法可以做到这一点,我将很乐意学习它。
答案 0 :(得分:4)
嗯,快速的方法是
$portlist = [System.IO.Ports.SerialPort]::GetPortNames() -replace 'COM'
如果您希望它是整数列表而不是数字字符串,那么您可以使用
[int[]] $portlist = ...
答案 1 :(得分:2)
这样的事情应该有效:
# initialize the variable that we want to use to store the port numbers.
$portList = @()
# foreach object returned by GetPortNames...
[IO.Ports.SerialPort]::GetPortNames() | %{
# replace the pattern "COM" at the beginning of the string with an empty
# string, just leaving the number. Then add the number to our array.
$portList += ($_ -ireplace "^COM", [String]::Empty)
}
请注意,我使用的是[IO.Ports.SerialPort]
而不是[System.IO.Ports.SerialPort]
。这些是相同的事情 - PowerShell隐含地假设您正在使用[System]
命名空间,因此您不需要明确指定它,尽管这样做没有任何问题。
修改强> 回答你的问题:
%{...}
是foreach-object {...}
的缩写。
$_
表示当前正在管道中的对象。当我们进入foreach-object
区块时,$_
会解析为我们当前正在处理的整个集合中的一个对象。
如果我们编写的代码有点不同,我认为它会更容易理解。在这些示例之间,$_
和$port
是相同的。
$portList = @()
foreach ($port in [IO.Ports.SerialPorts]::GetPortNames()) {
$portList += ($port -ireplace "^COM", [String]::Empty)
}
希望有所帮助!
答案 2 :(得分:1)
这应该涵盖它:
$portnos = $ports | foreach {$_ -replace 'COM',''}