【问题标题】:PowerShell Search look for files in a text filePowerShell 搜索在文本文件中查找文件
【发布时间】:2014-05-30 15:12:42
【问题描述】:

需要遍历存储在 .txt 文件中的文件列表来查找每个文件的路径

 files.txt
 example of the file in files.txt > 3030009948_3030009912_df1389947f0fb80d62832122.sasf

使用这个

Get-ChildItem “file_location” -Recurse -Include “*.**” | foreach-object {$_.Fullname} | Out-File c:\files2.txt –width 1024
File Location is a network share Z:

搜索存储在files.txt中的每个文件导出files2.txt中文件的路径 文件将在 Z 上找到:- 网络共享

【问题讨论】:

  • 我不明白,您是在寻找文件*.mp* 还是寻找类似于3030009948_3030009912_df1389947f0fb80d62832122.sasf 的文件列表,其中列表保存在.txt 文件中?
  • 所以 .sasf 是保存在 .txt 中的文件名,需要搜索列出的每个文件并在 Z 上显示路径:
  • 这些文件会在 Z: 驱动器上找到,还是在本地机器上?
  • 在 Z: 网络共享中找到

标签: powershell


【解决方案1】:

你已经拥有了你需要的东西,所以这很简单,你只需要读取文本文件并将其通过 ForEach 循环传递给你的 Get-ChildItem(我使用 Select -Expand FullName 而不是循环每个并选择属性),然后将其通过管道传输到 Out-File。

GC files.txt | %{GCI Z:\$_ -Recurse|Select -Expand FullName} | Out-File Z:\Files2.txt

编辑:好的,所以你说那行不通,但我不知道为什么行不通。当我测试它时,它在我的机器上运行良好。无论如何,它可能会很慢,因为它为每个文件拉一次网络驱动器的目录列表,所以我们会以不同的方式执行此操作。

$Files = GC files.txt
$DirList = GCI Z:\ -Recurse
$Dirlist | ?{$Files -contains $_.Name} | Select -Expand FullName | Out-File Z:\Files.txt

这会将您的文件列表加载到一个数组中,然后提取 Z:\ 驱动器的完整目录列表,然后过滤目录列表,检查每个文件以查看其名称是否在所需文件列表中,然后展开FullName 属性,并将其保存到所需的文件中。

【讨论】:

  • 似乎无法正常显示非相关文件 Z:\02\10 Z:\02\11 Z:\02\12 Z:\02\13 Z:\02\14 Z:\ 02\19 Z:\02\20 Z:\02\21 Z:\02\25 Z:\02\26 Z:\02\27 Z:\02\28 Z:\02\10\10 Z:\ 02\10\11 Z:\02\10\13 Z:\02\10\14 Z:\02\10\15 Z:\02\10\17 Z:\02\10\10\30 Z:\ 02\10\10\40 Z:\02\10\10\50 Z:\02\10\11\10 Z:\02\10\13\30 Z:\02\10\14\30 Z:\ 02\10\14\40 Z:\02\10\14\50 Z:\02\10\14\30\1030451778_1030451732_399ea71c3fd244ac9ef0fea9.sasf Z:\02\10\14\40\1030451835_1030451826_2779c0563bb33b8222f86b01.sasf none of these are in我的文件.txt
  • 我更新了我的答案。我不知道为什么这会给你带来不好的结果,我确实测试了我的第一个答案,它给了我很好的结果,但第二个答案对你来说可能更快。
  • 没有给你差评,只是现在用你的第二个例子检查了一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 2021-06-08
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多