我有一个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\
}
}
但它似乎没有起作用。它运行没有错误,但它没有真正做任何事情。
有什么想法吗?谢谢!
答案 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