Рекурсивное копирование и переименование файлов в командной строке Vista
Я пытаюсь пройтись через мою музыкальную директорию и скопировать каждый файл с именем 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 ответов
Попробуй это:
for /f "usebackq delims==" %I in (`dir /b /s ^| findstr folder.jpg`) do copy "%I" "%~pIcover.jpg"
Кольцо декодера:
usebackq:: выполнить команду в обратных кавычках и использовать выходные данные в качестве входных данных для цикла delims==:: использовать знак равенства в качестве разделителя. На самом деле вы можете использовать любой символ, который не является допустимым в имени файла dir /b /s:: сделать рекурсивный каталог, в котором выводятся только имена файлов ^|:: ^ экранирует символ канала, труба - скважина направляет вывод от первой команды ко второй findstr:: ищет на входе совпадающие строки и выводит их только %~pI:: тильда p указывает расширению переменной выводить только путь, а не полное имя файла + путь. Обратите внимание, это включает в себя завершающий \
Надеюсь, это поможет!
Вероятно, у вас нет файлов в папке с музыкой с именем folder.jpg, так что это не сработает, верно?
Я попытался сделать это в папке mymusic с помощью фиктивного файла folder.jpg, и он скопировал его как обычно.;)
Редактировать:
Киши прав, вам не хватает двойных кавычек на втором%i
PowerShell должен заменить CMD. Это неизбежно и праведно. И моя работа - помогать ему в этом...
gci -r . folder.jpg | % { copy $_.FullName ([IO.Path]::Combine( $_.Directory.FullName, "cover.jpg" )) }
Вам не хватает двойных кавычек в команде копирования.
Переменная%i будет содержать полный путь к файлу, который может содержать пробелы. Попробуйте использовать:
for /r %i in (folder.jpg) do copy "%i" cover.jpg
Вы можете просто использовать xcopy с флагом /s...
РЕДАКТИРОВАТЬ: Мой плохо - не прочитал вопрос должным образом. Xcopy с /s поможет при копировании файлов в фиксированное место назначения.