如何搜索目录中的所有文件以获取字符串列表(数字)?

时间:2017-10-12 18:21:38

标签: powershell csv

我有一个csv中的数字列表,格式如下:

po
123
456
789

我还有一个包含100多个文档的目录。我需要检查csv中每个字符串的每个文档。如果其中一个数字位于其中一个文档中,则需要将其移动到其他文件中。这就是我到目前为止所做的:

$files = Get-ChildItem "\\wh1-app\SPS EDI\ARCHIVE IN\*.txt"


foreach ($file in $files) {

    $file = Get-Content $file

    $pos = Import-Csv -Path C:\Users\ttilton\Desktop\pos.csv -OutVariable string -ErrorAction SilentlyContinue

    foreach ($po in $pos) {

       $containsWord = $file | %{$_ -match $po.po}

        if ($containsWord -contains $true){ 

            write-host $file + " is " + $po.po

            #Copy-Item $file C:\Users\ttilton\Desktop\pos\

        }
    }

但它似乎没有起作用。它运行没有错误,但它没有真正做任何事情。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

对于我测试的内容,它应该有效,我猜您的远程位置(\\wh1-app\SPS EDI\ARCHIVE IN\*.txt)(包含.txt文件的(可访问性)存在问题。

要解决此问题,我会将一些源文件置于本地(例如C:\temp\*.txt

或者在脚本中添加其他Write-Host命令。例如这里:

...
foreach ($file in $files) {
    Write-Host $file.name    # Is there really a file picked up here?
    $file = Get-Content $file
    ...

加速你运作的一些一般性建议:

  • $pos = Import-Csv -Path C:\Users\ttilton\Desktop\pos.csv -OutVariable string -ErrorAction SilentlyContinue放出foreach ($file in $files) {...循环,您只需要阅读.csv文件一次。
  • 如果找到匹配项,请不要(继续)阅读.txt$True中的一个$containsWord足以验证if ($containsWord -contains $true){...。停止ForEach循环见:https://stackoverflow.com/a/10420522/1701026