Рекурсивное копирование и переименование файлов в командной строке Vista - PullRequest
3 голосов
/ 23 мая 2009

Я пытаюсь пройтись по моему музыкальному каталогу и скопировать каждый файл с именем folder.jpg в файл в том же каталоге с именем cover.jpg.

Я пробовал варианты предложений в этом вопросе , например:

for /r %i in (folder.jpg) do copy %i cover.jpg

В результате "Система не может найти указанный файл."

Как я могу решить эту проблему?

Редактировать

Вот что я закончил:

for /r %i in (folder.jpg) do copy "%i" "%~picover.jpg"

Ответы [ 5 ]

5 голосов
/ 23 мая 2009

Попробуйте это:

for /f "usebackq delims==" %I in (`dir /b /s ^| findstr folder.jpg`) do copy "%I" "%~pIcover.jpg"

Кольцо декодера:

usebackq :: run the command in the backquotes and use the output as the input for the loop
delims== :: use the equal sign as a delimeter. Really you could use any character that isn't valid in a file name
dir /b /s :: do a recursive directory listing only outputting the bare file names
^| :: ^ escapes the pipe character, the pipe - well pipes the output from the first command to the second
findstr :: searches the input for matching lines, and only outputs them
%~pI :: the tilde p instructs the variable expansion to only output the path rather than full file name + path. Note, this includes a trailing \

Надеюсь, это поможет!

1 голос
/ 23 мая 2009

PowerShell должен заменить CMD. Это неизбежно и праведно. И моя работа - помочь ему в этом ...

gci -r . folder.jpg | % { copy $_.FullName ([IO.Path]::Combine( $_.Directory.FullName, "cover.jpg" )) }
1 голос
/ 23 мая 2009

В команде копирования отсутствуют двойные кавычки.

Переменная% i будет содержать полный путь к файлу, который может содержать пробелы. Попробуйте использовать:

for /r %i in (folder.jpg) do copy "%i" cover.jpg
1 голос
/ 23 мая 2009

Возможно, в вашей музыкальной папке нет файлов с именем folder.jpg, поэтому она не работает, верно?

Я попробовал это в папке mymusic с фиктивным файлом folder.jpg, и он скопировал его нормально. ;)

Редактировать:

Киши прав, вам не хватает двойных кавычек на втором% i

0 голосов
/ 23 мая 2009

Вы можете просто использовать xcopy с флагом / s ...

EDIT: Мой плохой - не правильно прочитал вопрос. Xcopy с / s поможет при простом копировании файлов в фиксированное место назначения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...