Powershell-循环故障

Powershell-循环故障,powershell,Powershell,首先,我想为目录中的所有文本文件生成一个目录列表。接下来,获取每个文本文件并获取内容。然后,我要遍历这些内容,并在另一个目录中搜索与第一个文件共享内容的所有文本文件,并将这些对应的匹配项输出到以源文件命名的文件中 我对这一切都很陌生,我意识到我遗漏了一些重要的基础知识。我仅有的一点脚本编写经验是Javascript,它似乎并不完全可移植。(有人告诉我,编程就是编程。) 这就是我到目前为止所做的: $max = get-content h:test1\one.txt | Measure-Objec

首先,我想为目录中的所有文本文件生成一个目录列表。接下来,获取每个文本文件并获取内容。然后,我要遍历这些内容,并在另一个目录中搜索与第一个文件共享内容的所有文本文件,并将这些对应的匹配项输出到以源文件命名的文件中

我对这一切都很陌生,我意识到我遗漏了一些重要的基础知识。我仅有的一点脚本编写经验是Javascript,它似乎并不完全可移植。(有人告诉我,编程就是编程。)

这就是我到目前为止所做的:

$max = get-content h:test1\one.txt | Measure-Object
$A = get-content h:test1\one.txt
For($i=0; $i -lt $max.count ; $i++){
    select-string h:test2\*.txt -pattern $($A[$i]) | Format-Table | Out-File ($i + '.txt')
    }
我希望有这样的东西:

$max = get-content $files[i] | Measure-Object
    $A = get-content files[i]
    For($j=0; $j -lt $max.count ; $j++){
        select-string h:test2\*.txt -pattern $($A[$j]) | Format-Table | Out-File($files[i].basename + $j + '.txt')
    }
非常感谢您的任何帮助

库尔蒂斯

所以

第1册(1.txt)

法国的首都是巴黎。
巴黎的人口是十二

第二册(two.txt)

法国是一个美丽的国家。
法国的首都是巴黎

我基本上想要一份关于two.txt与one.txt共享一行的报告

首先,我想为目录中的所有文本文件生成一个目录列表

以下是方法:

$textFiles1 = dir -Path C:\Books1 -Filter *.txt
$textFiles2 = dir -Path C:\Books2 -Filter *.txt
  • 接下来,获取每个文本文件并获取内容
  • 我想看看第一本书中的任何一行是否出现在其他任何一本书中
  • 这里有一个算法可以做到这一点(未经测试)(已测试):


    好的,让我们来分析一下:

    首先,我想为目录中的所有文本文件生成一个目录列表。接下来,获取每个文本文件并获取内容

    然后我想浏览内容并搜索所有文本文件 在与第一个文件共享内容的另一个目录中

    好的,现在我们通过管道将所有文本传输到
    选择字符串
    (首先用
    过滤掉所有空字符串?{$}

    dir *.txt | get-content | ?{$_} | %{select-string -path searchPath\*.txt -pattern "$_" -simple}
    
    并将这些对应的匹配项输出到以 源文件

    所以现在变得很棘手,因为我们必须返回并跟踪源文件名,我们通过将查询包装在foreach中来实现这一点(即
    %{}
    ):


    当你说共享内容时,你的意思是相同的文件吗?或者仅仅是它们的部分内容是相同的?它们的部分内容是相同的。所以全行匹配就足够了?全行就行了。哈哈,在一个理想的世界里,它实际上是句子,但我不知怎么地认为这会使问题复杂化:P在b处被极化原始问题的奥托姆。哈哈,我还没有掌握这个界面的窍门。对不起:P@KurtisStaples-国王,我更新了我的答案。试试看……你必须修好通往你想要的道路当然……爱死它!我会投赞成票,但我的名声不好:P@KurtisStaples-King修复了管道获取内容的问题。它现在可以工作:-)这太完美了!非常有用。多谢各位。
    dir *.txt | get-content
    
    dir *.txt | get-content | ?{$_} | %{select-string -path searchPath\*.txt -pattern "$_" -simple}
    
    dir *.txt | %{ $sourceFile = $_; get-content $_ | ?{$_} | %{select-string -path searchPath\*.txt -pattern "$_" -simple} | out-file "$sourceFile.results" }