Назад | Перейти на главную страницу

Скопируйте файл под другое имя в одном каталоге во всех подкаталогах

Поскольку для разных приложений требуются разные имена файлов, я пытался скопировать Folder.jpg в cover.jpg во всех подпапках, но не смог заставить работать свой shellscript.

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

Ошибки не было, но ничего не произошло.

Благодарен за любую помощь экспертов здесь.

Проще всего выполнить рекурсивный поиск 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'}

@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" }