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

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

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

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

2 ответа

Решение

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

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

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

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

$source = 'C:\data'
$dest = 'D:\backup'
$exclude = @('*.jpg.jpg')
Get-ChildItem $source -Recurse -Exclude $exclude -Filter *.jpg | Copy-Item -Destination {Join-Path $dest $_.FullName.Substring($source.length)}

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

You can use a for loop to iterate files in the directory and use variable substitutions to check that each iterated "file name part only without it's own extension" does not contain another extension (.jpg). Files that do not contain an additional extension within their file name will be copied with the xcopy command using conditional if logic accordingly.

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

@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
Другие вопросы по тегам