2015-04-29 2 views
0

мне нужно скопировать ряд файлов, которые выглядят какКопирование нескольких файлов в тот же каталог, изменяя имя файла

foo.bar 
foo.baz 
foo.boo 
... 

в тот же режиссер, но изменить foo к moo.

moo.bar 
moo.baz 
moo.boo 
... 

Но я не уверен, как я могу копировать и переименовывать несколько файлов в одну команду. Что-то вроде линий

cp 'foo.*' . | ren foo.* moo.* 

За исключением того, что не имеет синтаксического смысла. Я понимаю, что могу поместить это во временный каталог, переименовать его, а затем переместить обратно, но мне любопытно, есть ли способ сделать это в 1 строке.

ответ

2

Вы можете переименовать несколько файлов следующим образом:

Get-ChildItem -Filter "foo*" | {$_.name -replace 'foo','moo' } 

См этот link для более подробной информации.

И вы можете цеплять команды в powershell, используя точку с запятой.

EDIT: я в настоящее время не имеют доступа к машине Windows, чтобы проверить это, но я предполагаю, что должно работать:

ls 'foo*' | % {$newName = $_.name -replace 'foo','moo'; cp $_ $newName ; } 
+0

Но разве это не заменит файл? Я хочу сохранить оригинальную копию. –

+0

Нет, не будет. $ newName будет содержать новое имя, которое вы хотите предоставить (например: moo.bar). А затем «cp» создает копию исходного файла (т. Е. $ _) С именем $ newName. Если вы хотите скопировать файл в пункт назначения, отличный от текущей, вы можете указать этот путь как часть $ newName. Вы можете сначала попробовать его с образцовыми файлами, чтобы подтвердить это. Как я уже упоминал, к сожалению, я не могу проверить это прямо сейчас. – jithinpt

+0

О, я имел в виду первую попытку. 'Get-ChildItem -Filter" foo * "| {$ _. name -replace 'foo', 'moo'} ' –

0

Вы могли бы так это так:

Get-ChildItem -Filter "foo*" | % { 
    Copy-Item $_.Name ($_.Name -replace 'foo', 'moo') -WhatIf 
} 

Оставьте -whatif для проверки, а затем удалите его, когда вы счастливы, что он даст вам то, что вы хотите.

Смежные вопросы