![将文件复制到所有子目录中的同一目录中的不同名称](https://linux22.com/image/703165/%E5%B0%86%E6%96%87%E4%BB%B6%E5%A4%8D%E5%88%B6%E5%88%B0%E6%89%80%E6%9C%89%E5%AD%90%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%90%8C%E4%B8%80%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E4%B8%8D%E5%90%8C%E5%90%8D%E7%A7%B0.png)
由于不同的应用程序需要不同的文件名,我一直尝试将 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" }