Arrays Powershell基于名称在一个位置查找文件,而不是写入另一个位置

Arrays Powershell基于名称在一个位置查找文件,而不是写入另一个位置,arrays,file,powershell,find,move,Arrays,File,Powershell,Find,Move,对于powershell,我是一个初学者,但最近我被要求为基础架构人员创建一个脚本 基本上,我有一个文本文件中的文件名列表。 这些文件存在于两个不同的位置,比如位置A和位置B。这些文件可能位于文件夹根目录中的不同子文件夹中 我需要做的是找到文本文件中列出的每个文件。 在位置a中搜索文件,然后在位置B中查找文件,很可能是不同的文件夹结构,然后在位置B中存在的文件与位置a中的文件所在的相同位置重写文件 我假设这需要通过一个数组来完成。我遇到的问题是在每个位置查找文件,然后重写相关的文件名 任何帮助都

对于powershell,我是一个初学者,但最近我被要求为基础架构人员创建一个脚本

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

我需要做的是找到文本文件中列出的每个文件。 在位置a中搜索文件,然后在位置B中查找文件,很可能是不同的文件夹结构,然后在位置B中存在的文件与位置a中的文件所在的相同位置重写文件

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

任何帮助都将不胜感激。我刚刚看到这个网站,并打算在将来更多地使用它

到目前为止,我的代码是:

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

Foreach ($File in $FileList) { 
    Get-ChildItem $Src -Name -Recurse $File
}
  • Get ChildItem$Src-Recurse-Include(Get Content$FileList)
    $Src
    的子树中搜索名称包含在文件
    $FileList
    中的任何文件(
    -Include
    在叶(文件名)上操作)组件,并接受名称数组,这是默认情况下
    Get Content
    返回的内容)

  • Get ChildItem$Dst-Recurse-Filter$\.Name
    $Dst
    的子树中搜索同名文件(
    $\.Name
    );请注意,在本例中使用了
    -Filter
    ,这是出于性能原因而更可取的选择,但仅是具有单个名称/名称模式的选项

  • 然后,
    开关
    语句确保仅当目标子树中正好有1个文件匹配时才执行复制操作

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


肯定比我的脚本更高效+1@MavCoder:很遗憾听到这个消息;没有什么容易想到的。我建议你问一个新问题,更详细地描述这个问题,最好是通过一个简单的例子。
$FileList = Get-Content 'C:\File_Names.txt' 
$SrcDir ='\\server\Temp' 
$DstDir ='\\server\Testing' 
Foreach ($File in $FileList) { 
    $SrcFile = Get-ChildItem $SrcDir -Recurse $File -EA SilentlyContinue
    $DstFile = Get-ChildItem $DstDir -Recurse $File -EA SilentlyContinue
    if (($Srcfile.count -eq 1) -and ($DstFile.count -eq 1)){
        Copy-Item $SrcFile $DstFile
    } Else {
        "More/less than one Source and/or Destination file $File"
    }
}
$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: $_" }
  }
}