1

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

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

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

2 ответа2

1

Вы можете использовать цикл 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

Использование 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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .