Как скопировать файлы только с 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