首页 > 解决方案 > 使用 powershell 脚本语法的建议

问题描述

我正在编写一个 powershell 脚本来执行以下操作:

在一个文件夹Folder > Subfolder1 > Subfolder2中有 30 多个subfolders.zip,其中还有另一个包含 200 个 HRML 文件的子文件夹。我想WTSE在 HTML 文件中搜索关键字,任何包含此类关键字的文件都将被移动到另一个文件夹。

我的脚本目前如下所示:

Get-childitem C:\Users\XXXXX\Desktop\Folder\ -filter *.html -recurse | select-string 'WTSE'|foreach-object -process{move-item} C:\Users\XXXXX\Desktop\Folder2`

标签: powershell

解决方案


您快到了。问题出在后面的部分ForEach-Object

由于您不是使用正则表达式搜索字符串,因此我建议将其添加-SimpleMatchSelect-Stringcmdlet。

试试下面:

$sourceFolder = 'C:\Users\XXXXX\Desktop\Folder'
$destination  = 'C:\Users\XXXXX\Desktop\Folder2'

(Get-ChildItem -Path $sourceFolder -Filter '*.html' -Recurse | Select-String -Pattern 'WTSE' -SimpleMatch) | 
    Move-Item -Destination $destination

Move-Item cmdlet 可以采用路径数组,并且这些路径也可以接受管道输入,因此此处无需使用ForEach-Object

注意我在第一部分周围使用了括号(Get-ChildItem ... -SimpleMatch)。这样可以防止进程因为正在使用而无法打开文件的错误


推荐阅读