提问人:Nathan 提问时间:10/13/2023 更新时间:10/13/2023 访问量:58
如何使用Get-Childitem搜索具有不同名称的多个文件?
How to search for multiple files with different names using Get-Childitem?
问:
我正在尝试查找许多不同的文件,这些文件存储在具有随机生成名称的多个驱动器上,它们都具有相同的文件扩展名。我可以从创建它们的程序中获取名称,但我想自动执行搜索和复制功能以将它们移动到单独的文件夹,这是我到目前为止所拥有的,但它无法编译:
$paths="C:\","D:\","E:\","F:\"
$files="FileA", “FileB”,”FileC”
for ($i=0; $i -lt $files.Length; $i++) {
$file="*" + $files[i] + "*.txt"
Get-ChildItem -Path $paths -recurse -Filter $file | Out-File C:\report.txt
}
Write-Host "Press any key to continue..."
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
如果我想手动运行命令,那么它会将文件路径输出到报告 .txt 文件,很好:
Get-ChildItem -Path $paths -recurse -Filter *FileA*.icl | Out-File C:\report.txt
此外,我如何获取生成的列表并将其全部复制到单独的文件夹中?
答:
2赞
Santiago Squarzon
10/13/2023
#1
Olaf 在他有用的评论中指出的是,您可以利用该参数,该参数可以采用通配符模式数组,而采用单个字符串。这将改进您的代码,因为对 Get-ChildItem -Recurse
的调用将只有一个,而不是$files
中每个项的一个调用。-Include
-Filter
关于“编译失败”,这大概是语法错误,什么时候应该是.$files[i]
$files[$i]
关于将找到的文件复制到目标文件夹,请参阅添加的行,获取找到的文件,将它们复制到目标文件夹(将路径更改为现有文件夹),然后这些复制文件的详细信息存储在文件中,请注意使用 而不是 ,您在这里处理的是对象而不是纯文本,因此您希望使用旨在将对象转换为结构化数据的 cmdlet。Copy-Item
report.csv
Export-Csv
Out-File
$paths = 'C:\', 'D:\', 'E:\', 'F:\'
$files = 'FileA', 'FileB', 'FileC'
$patterns = $files.ForEach({ [WildcardPattern]::Escape($_) + '*.txt' })
Get-ChildItem -Path $paths -Recurse -Include $patterns |
Copy-Item -Destination path\to\theDestinationFolder -PassThru |
Export-Csv C:\report.csv -NoTypeInformation
Write-Host 'Press any key to continue...'
$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
评论
-Filter
-Include
$files[i]
$files[$i]