0

Скажем, у меня есть файл с именем api-build009.jar и он существует в нескольких каталогах.Массовое копирование и переименование файлов в соответствующие каталоги (CLI/PowerShell)

D:\InstallDir\subdir1\ 
D:\InstallDir\subdir2\subdir21\ 
D:\InstallDir\subdir3\ 
D:\InstallDir\subdir4\subdir41\ 
D:\InstallDir\subdir5\ 
D:\InstallDir\subdir6\subdir61\subdir62\ 
D:\InstallDir\subdir7\ 
D:\InstallDir\subdir8\ 

Я хочу сделать резервную копию (и таким образом переименовать) файл в тот же соответствующий каталог, что и исходный файл. Я хочу выполнить эту операцию для всех каталогов выше (8, в этом примере), скопировав исходный файл, а затем переименуйте его в api-build009.jar.bak.

D:\InstallDir\subdir1\api-build009.jar.bak 
D:\InstallDir\subdir2\subdir21\api-build009.jar.bak 
D:\InstallDir\subdir3\api-build009.jar.bak 
D:\InstallDir\subdir4\subdir41\api-build009.jar.bak 
D:\InstallDir\subdir5\api-build009.jar.bak 
D:\InstallDir\subdir6\subdir61\subdir62\api-build009.jar.bak 
D:\InstallDir\subdir7\api-build009.jar.bak 
D:\InstallDir\subdir8\api-build009.jar.bak 

Как выполнить этот процесс с помощью Windows CLI или PowerShell?

Благодарим вас заблаговременно.

ответ

1

Как только вы пишете a file - звучит как тот же файл, а затем вы пишете резервную копию the file в той же папке. Являются ли эти разные версии или копии одного и того же файла.
Эти сценарии будут копировать файлы в то же имя и местоположение с .bak расширением

Batch

@Echo off 
PushD "D:\InstallDir" 
For /f "delims=" %%A in (
    'Dir /B/S api-build009.jar' 
) Do Echo Copy "%%~fA" "%%~fA.bak" 
Popd 

PowerShell

Get-ChildItem -Path D:\InstallDir -File -Filter api-build009.jar| 
    ForEach { Copy-Item $_.FullName -Destination "$($_.Fullname).bak" -whatif} 

Если выход выглядит нормально удалить echo в партии/-whatif в сценарий

+0

Это замечательно. Спасибо. Я работал над чем-то похожим, но это выглядит намного лучше. Можете ли вы обновить мою память - в чем цель '~' здесь? Что делает '%% ~ fA' точно? – user3621633

+1

@ user3621633 Это модификатор var, см. 'For /?'. '~ f' расширяет %% A до полного имени, так же как' ~ dpnx' aka имя пути и расширение. – LotPings

+0

Отлично. Я ценю образование. Еще раз спасибо за вашу помощь. Это должно сделать трюк, будь то пакет или PowerShell. :) – user3621633