Как скопировать файлы только с 1 расширением и не дублировать их в командной строке

227
user935892

Мне нужно только копировать, .jpgа не .jpg.jpgиз определенной папки.

Когда я делаю, copy c:\data\*.jpg D:\backup\оба .jpgи .jpg.jpgименованные файлы копируются, и я не уверен, как исключить двойное расширение именованных файлов из операции копирования.

Примечание. Мне не разрешается переименовывать или удалять эти .jpg.jpgфайлы.

1
Вместо использования сложных продуктов синхронизации может быть проще скопировать все файлы `.jpg`, а затем удалить файлы` .jpg.jpg`. harrymc 5 лет назад 1

2 ответа на вопрос

1
Pimp Juice IT

Вы можете использовать цикл for для итерации файлов в каталоге и использовать подстановки переменных, чтобы проверить, что каждая повторяемая « часть имени файла только без собственного расширения » не содержит другого расширения ( .jpg). Файлы, которые не содержат дополнительного расширения в своем имени файла, будут скопированы с помощью команды xcopy с использованием условной логики if соответственно.

Пакетный скрипт

@ECHO ON  SET "srcPath=c:\data" SET "copyPath=D:\backup"  for %%a in ("%srcPath%\*.jpg") do ( for %%b in ("%%~dpna") do if [%%~xb]==[] XCOPY /F /Y "%%~a" "%copyPath%\" ) PAUSE EXIT 

Дополнительные ресурсы

  • За
  • Переменные замены (FOR /?)

    Кроме того, была улучшена замена ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:

    %~I - expands %I removing any surrounding quotes (") %~nI - expands %I to a file name only %~xI - expands %I to a file extension only 
  • Если

  • XCOPY
0
Baldrickk

Использование powershell вместо командной строки:

Copy-Item C:\data*.jpg -Destination D:\backup -Exclude "*.jpg.jpg" 

Это, конечно, при условии, что у вас есть много файлов с именами data[something].jpgв C: а не дерево каталогов с изображениями в нем.

Если вам нужна рекурсивная копия jpgs в C: \ Data \ без файлов, оканчивающихся на .jpg.jpg:

$source = 'C:\data' $dest = 'D:\backup' $exclude = @('*.jpg.jpg') Get-ChildItem $source -Recurse -Exclude $exclude -Filter *.jpg | Copy-Item -Destination  

(постыдно украден и изменен из этого ответа на SO )