powershell - 使用 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`
解决方案
您快到了。问题出在后面的部分ForEach-Object
。
由于您不是使用正则表达式搜索字符串,因此我建议将其添加-SimpleMatch
到Select-String
cmdlet。
试试下面:
$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)
。这样可以防止进程因为正在使用而无法打开文件的错误
推荐阅读
- react-native - Expo错误输出未显示目录或源
- php - 为什么网页中的 phpinfo() 显示版本 5.6,但命令行中的 php -v 显示 7.3?
- python - 如何在非索引列上找到多个熊猫数据框的交集
- c - C: printf 在 while 循环之前仍然没有刷新,即使格式字符串中有换行符
- c++ - 在 Visual C++ 2017 中:属性页中的哪个位置说明了哪些应用程序类型对应于项目?
- webpack - @font-face 不上传本地字体并且不显示错误(webpack)
- java - 每当我尝试获取表上的值并在`setString`上使用它时,我都会收到 indexOutOfBoundsException
- reactjs - 如何通过单击查看按钮显示保存的数据
- algorithm - TEA 算法中操作数的值在 Assembly 中无法正确解密
- javascript - 如何用n个切片画一个圆