Powershell根据名称

时间:2017-06-10 20:29:36

标签: arrays file powershell find move

我是PowerShell的初学者,但最近我被要求为基础设施人员创建一个脚本。

基本上我在文本文件中有一个文件名列表。 这些文件存在于两个不同的位置,比如说locationA和locationB。这些文件可能位于文件夹根目录下的不同子文件夹中。

我需要做的是找到文本文件中列出的每个文件。 在locationA中搜索文件,然后在locationB中找到该文件,很可能是一个不同的文件夹结构,然后将该文件写入locationB中与locationA中的文件相同的位置。

我假设这需要通过数组来完成。我遇到的问题是在每个位置找到文件,然后用文件名重写相关文件。

任何帮助将不胜感激。我刚刚遇到这个网站,打算将来再使用它。

到目前为止我的代码:

$FileList = 'C:\File_Names.txt' 
$Src ='\\server\Temp' 
$Dst ='\\server\Testing' 

Foreach ($File in $FileList) { 
    Get-ChildItem $Src -Name -Recurse $File
}

2 个答案:

答案 0 :(得分:2)

$FileList = 'C:\File_Names.txt' 
$Src ='\\server\Temp' 
$Dst ='\\server\Testing' 

Get-ChildItem $Src -Recurse -Include (Get-Content $FileList) | ForEachObject {
  $destFile = Get-ChildItem $Dst -Recurse -Filter $_.Name
  switch ($destFile.Count) {
    0 { Write-Warning "No matching target file found for: $_"; break }
    1 { Copy-Item $_.FullName $destFile.FullName }
    default { Write-Warning "Multiple target files found for: $_" }
  }
}
  • Get-ChildItem $Src -Recurse -Include (Get-Content $FileList)$Src子树中搜索名称包含在文件$FileList中的任何文件(-Include对叶子(文件名)组件进行操作仅限路径,并接受名称的数组,这是Get-Content默认返回的内容。

  • Get-ChildItem $Dst -Recurse -Filter $_.Name$Dst的子树中搜索同名文件($_.Name);请注意,在这种情况下使用-Filter,出于性能原因这是优选的,但只有名称/名称模式的选项。

  • switch语句确保仅在目标子树中的 1 文件匹配时才执行复制操作。

  • Copy-Item调用中,访问源文件和目标文件的.FullName属性可确保明确引用文件。

答案 1 :(得分:0)

...