如何在命令提示符中复制仅具有 1 个扩展名的文件而不重复

如何在命令提示符中复制仅具有 1 个扩展名的文件而不重复

我只需要复制.jpg,而不是.jpg.jpg从特定的文件夹复制。

当我执行copy c:\data\*.jpg D:\backup\同时复制.jpg.jpg.jpg命名文件时,我不确定如何从复制操作中省略双扩展名命名的文件。

笔记:我不被允许重命名或删除这些.jpg.jpg文件

答案1

使用 powershell 而不是命令提示符:

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

当然,这是假设您有很多data[something].jpg以 C: 命名的文件,而不是包含图像的目录树。

如果您想要 C:\Data\ 中 s 的递归副本,jpg但不包含以 结尾的文件.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)}

(可耻地窃取并修改自这个答案

答案2

您可以使用为了循环迭代目录中的文件并使用 变量替换检查每次迭代的“仅包含文件名部分,不包含其自身的扩展名“不包含其他扩展名 ( .jpg)。文件名中不包含其他扩展名的文件将被复制,复制使用条件命令如果逻辑也是如此。

批处理脚本

@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
    
  • 如果

  • 复制

相关内容