powershell - 按文件名搜索文件并使用结果搜索新文件 - Powershell
问题描述
在使用我的搜索结果时遇到问题。我递归地搜索一个文件夹以将所有大于 3 kb 的文件带给我。然后我需要使用这些文件的名称来查找所有具有相似名称的文件并将它们全部复制到一个新文件夹中。根目录包含:
folder1: 0050
DLD1900394819102600500001_a.txt 7kb
DLD1900394819102600500001_b.txt 1kb
DLD1900394819102600500001_c.txt 1kb
DLD1900394819102600500151_a.txt 1kb
DLD1900394819102600500151_b.txt 1kb
folder2: 0051
DLD1900394819102600500002_a.txt 7kb
DLD1900394819102600500002_b.txt 1kb
DLD1900394819102600500002_c.txt 1kb
DLD1900394819102600500122_a.txt 1kb
DLD1900394819102600500122_b.txt 1kb
所以通过使用这个
$Path = "C:\test\"
$test = Get-ChildItem $Path -recurse |
where-object {$_.length -gt 3000} |
ForEach-Object {$_.basename.replace("_a","")}
我发现所有大于 3 kb 的内容都删除了“_a”字符,我将这两个字符作为对象
DLD1900394819102600500001
DLD1900394819102600500002
,但是如何再次搜索所有文件夹以选择和复制
DLD1900394819102600500001*.*
DLD1900394819102600500002*.*
到新文件夹???
解决方案
我不是 100% 确定我理解你的问题。这是你要找的吗?
#Original code
$Path = 'C:\test'
$BaseNames =
((Get-ChildItem -Path $Path -Recurse) |
Where-Object{$_.Length -gt 3000}|
Select-Object -ExpandProperty BaseName) |
ForEach-Object{$_.Replace('_a','')}
#Use Regular expression to filter names
$regexBaseNames = ''
ForEach($name in $BaseNames){$regexBaseNames += "^$name.*[.].+|"}
#Remove pipe from end of regex expression
$regexBaseNames = $regexBaseNames.Substring(0,$regexBaseNames.Length - 1)
#Get files whose name matches regex expression
$Files = Get-ChildItem -Path $Path -Recurse |
Where-Object{$_.Name -match $regexBaseNames}
如果这不是您想要的,您能否详细说明您正在尝试做什么以及为什么需要这样做?这可能有助于回答您的问题。
注意 1:按照我的方式构建字符串可能非常耗费资源。如果您有很多要附加到字符串的基本名称,请考虑使用 StringBuilder .NET 类。
注意 2:您可能需要考虑构建一个 BaseName 数组以传递给 -Filter PowerShell 参数,然后分别对每个基本名称执行操作。如果您决定使用 Filter 方法(当涉及数千个文件时,PowerShell 通常比通过管道传输到 Where-Object 执行得快得多),您还可以将所有文件传递到单个数组列表中,然后使用ForEach 循环。
如果您需要我,我会给出这些建议的示例,我发现您的问题会从其中任何一个中受益。
推荐阅读
- java - 在日志中显示 JAVA_OPTS 环境变量如何配置?
- javascript - react-popper:使用 scheduleUpdate 重新定位
- java - 在 Java 中将 JSON 对象转换为 util.Date
- c# - C# OData:获取 OData 结果很慢
- php - 在子目录中使用 nginx 安装 Laravel
- xml - 如何在 XML / XSD 中定义整数范围?
- css - 在 Bootstrap 3 表单中并排设置两个输入字段的正确方法?
- powershell - 通过 cmd 批处理 USB 本地和远程端口配置
- django - 如何在 QuerySet 上使用 Django 注释添加注释?
- mysql - 错误 1005,“无法创建表 - SQLAlchemy 到 MySQL