我试图在forshell循环中的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.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
的正确符号是什么?
在Read
上应用的inFile
方法是否真的需要Char[]
类型作为$buffer
的参数吗?并且有可能获得[String]
参数吗?
有人可以给我提示吗?
答案 0 :(得分:0)
好吧
我确定第一次提交问题时会提醒您,但请记住将您的代码放在代码块中,例如:
$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循环中要执行的操作没有任何想法,所以我很乐意帮助您使其对Powershell更加友好,但是您必须先问清楚要问的问题我可以的。