Powershell 如何在参数名中使用变量
我尝试在for循环中读取powershell脚本中的多个文件,始终动态切换文件名 我尝试了不同的表示法,但仍有错误。Powershell 如何在参数名中使用变量,powershell,arguments,Powershell,Arguments,我尝试在for循环中读取powershell脚本中的多个文件,始终动态切换文件名 我尝试了不同的表示法,但仍有错误。 代码如下: $fileName1 = "D:\file333" $fileName2 = "D:\file444" $datePattern =" C.{3} " [Char[]]$buffer = new-object char[] 10000 for ($j=1; $j -le 2; $j++) { [string]$fileNumber = $j.ToStr
代码如下:
$fileName1 = "D:\file333"
$fileName2 = "D:\file444"
$datePattern =" C.{3} "
[Char[]]$buffer = new-object char[] 10000
for ($j=1; $j -le 2; $j++)
{
[string]$fileNumber = $j.ToString()
$inFile = new-object -TypeName System.IO.StreamReader -ArgumentList
$fileName($fileNumber)
[int]$bytesRead = $inFile.Read($buffer, 0, $buffer.Length)
while ($bytesRead -gt 0) {
[string]$bufferString = -join $buffer
$results = $bufferString | Select-String $datePattern -AllMatches
$results.Matches.Value
[int]$bytesRead = $inFile.Read($buffer, 0, $buffer.Length)
}
}
我有两个问题:
-ArgumentList
,获取FileName1
,然后获取FileName2
,正确的符号是什么infle
的Read
方法是否确实需要Char[]
类型作为$buffer
的参数?是否可以改为获取[String]
参数$fileName1 = "D:\file333"
$fileName2 = "D:\file444"
$datePattern =" C.{3} "
[Char[]]$buffer = new-object char[] 10000
for ($j=1; $j -le 2; $j++)
{
[string]$fileNumber = $j.ToString()
$inFile = new-object -TypeName System.IO.StreamReader -ArgumentList
$fileName($fileNumber)
[int]$bytesRead = $inFile.Read($buffer, 0, $buffer.Length)
while ($bytesRead -gt 0)
{
[string]$bufferString = -join $buffer
$results = $bufferString | Select-String $datePattern -AllMatches
$results.Matches.Value
[int]$bytesRead = $inFile.Read($buffer, 0, $buffer.Length)
}
}
现在,我真的不确定你想在这里做什么。不管是什么,我强烈建议你围绕它提出一个有根据的问题
在任何情况下,powershell都不支持您试图创建的行为。这是一个容易落入的新手陷阱。哦,我想找到文件1和2,所以我做了一个循环并使用迭代器,对吗错了强>
您需要在包含这些文件的集合上循环。Powershell不会将文件视为集合的一部分,除非您将其放入一个集合中
试试这个
$files = @("D:\file3333", "D:\file444")
$datePattern =" C.{3} "
[Char[]]$buffer = new-object char[] 10000
foreach(file in files)
{
[int]$bytesRead = new-object -TypeName System.IO.StreamReader -ArgumentList $file | $_.Read($buffer, 0, $buffer.length)
while($bytesRead -gt 0)
{
[string]$bufferString = -join $buffer
$results = $bufferString | Select-String $datePattern -AllMatches
$results.Matches.Value
[int]$bytesRead = $inFile.Read($buffer, 0, $buffer.Length)
}
}
在这里,我们将文件放入一个集合中,并使用foreach循环迭代该集合。我们可以使用管道操作符将您的多行代码折叠成一行,将文件调用到缓冲流中
我不知道您在while循环中要做什么,因此我很乐意帮助您使它更友好一些,但在我这样做之前,您必须先问一下您想问的问题。请。谢谢您Philippe,它帮助我消除了一个新的障碍!我一部分一部分地阅读一个巨大的文件,并在while循环中寻找模式