将文件复制到所有子目录中的同一目录中的不同名称

将文件复制到所有子目录中的同一目录中的不同名称

由于不同的应用程序需要不同的文件名,我一直尝试将 Folder.jpg 复制到所有子文件夹中的 cover.jpg,但无法使我的 shellscript 正常工作。

get-childItem -recurse | Where {$_.extension -eq "jpg"} | copy-item Folder.jpg cover.jpg

没有错误但是什么也没有发生。

感谢这里专家的帮助。

答案1

最简单的方法是递归搜索 Folder.jpg,更改到该文件夹​​,复制并获取下一个。

# Change to base folder
Push-Location "Q:\Test\2017"
Get-ChildItem Folder.jpg -Recurse | ForEach-Object {
  Set-Location $_.DirectoryName
  Copy-Item .\Folder.jpg .\Cover.jpg
} 
Pop-Location

gci folder.jpg -r|copy -dest {$_.FullName -replace 'folder','cover'}

答案2

@LotPings 为您的任务提供了一个格式良好的 PS 脚本。如果它是一个函数就更好了。

function Copy-Covers ($location) {
    # Change to base folder
    Push-Location $location

    # Recursively copy all occurrences of folder.jpg under $location
    Get-ChildItem Folder.jpg -Recurse | ForEach-Object {
      Set-Location $_.DirectoryName
      Copy-Item .\Folder.jpg .\Cover.jpg
    } 
    Pop-Location

}

对于一次性任务,您通常可以使用单行命令。在本例中,它看起来像这样(从要进行复制的基本文件夹执行):

gci -R -filter folder.jpg | % {copy $_ "$($_.DirectoryName)\cover.jpg" }

相关内容