Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个循环两个文件比较-powershell_Powershell - Fatal编程技术网

两个循环两个文件比较-powershell

两个循环两个文件比较-powershell,powershell,Powershell,尝试在读取2个文件时进行2次循环,目的是从第一个文件中获取1个值,并将其与1,2,3.进行比较。。etc第二个文件中的值,然后返回到外部循环,获取第二个值并依次与第二个文件中的所有值进行比较,依此类推 问题是它只对第一个文件中的第一个值运行比较,然后停止 代码: 内部循环完成后,需要重新打开$retired文件。正如现在所写的,一旦内部循环遍历$retired文件,$retired.EndOfStream将永远保持为true try { while(!$main_list.EndOfSt

尝试在读取2个文件时进行2次循环,目的是从第一个文件中获取1个值,并将其与1,2,3.进行比较。。etc第二个文件中的值,然后返回到外部循环,获取第二个值并依次与第二个文件中的所有值进行比较,依此类推

问题是它只对第一个文件中的第一个值运行比较,然后停止

代码:


内部循环完成后,需要重新打开$retired文件。正如现在所写的,一旦内部循环遍历$retired文件,$retired.EndOfStream将永远保持为true

try
{
    while(!$main_list.EndOfStream)
    {   
        $main_list_line = $main_list.ReadLine()

        while(!$retired.EndOfStream)
        {   
            $retired_list_line =  $retired.readline()

            if($main_list_line -eq $retired_list_line)
            {
                write-host "`n`n`n match found for $main_list_line in main list `n`n`n`n"
                add-content "c:\ping-workstations\matches-through-text-files.txt" "$main_list_line`n"
            }   
            write-host "main iteration: $main_i / inside iteration: $retired_i`n - main value: $main_list_line ---- inside value: $retired_list_line`n`n"
            $retired_1++
        }
        $main_i++
        $retired.close()
        $retired = [System.IO.File]::OpenText('c:\ping-workstations\retired.txt')
    }
}
finally
{
    $main_list.close()
    $retired.close()
}

作为补充说明,您是否考虑过使用Powershell ISE?具有调试功能;通过设置断点并单步执行代码,我能够快速发现问题。

您到底想实现什么?如果只需要查找匹配项,则很容易:
$main_list=Get Content'c:\ping workstations\main_list.txt'$retired=获取内容“c:\ping workstations\retired.txt”;foreach($main_list中的line){if($retired-包含$line){'match found:{0}'-f$line}}
这是一个很长的列表,所以尽量避免使用gc非常感谢你,是的,今天早上经过无数次尝试,终于找到了它。从现在起将使用ISE。
try
{
    while(!$main_list.EndOfStream)
    {   
        $main_list_line = $main_list.ReadLine()

        while(!$retired.EndOfStream)
        {   
            $retired_list_line =  $retired.readline()

            if($main_list_line -eq $retired_list_line)
            {
                write-host "`n`n`n match found for $main_list_line in main list `n`n`n`n"
                add-content "c:\ping-workstations\matches-through-text-files.txt" "$main_list_line`n"
            }   
            write-host "main iteration: $main_i / inside iteration: $retired_i`n - main value: $main_list_line ---- inside value: $retired_list_line`n`n"
            $retired_1++
        }
        $main_i++
        $retired.close()
        $retired = [System.IO.File]::OpenText('c:\ping-workstations\retired.txt')
    }
}
finally
{
    $main_list.close()
    $retired.close()
}