You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 10下基于正则匹配文件名前缀的差异化文件复制需求

Windows 10下基于正则匹配文件名前缀的差异化文件复制需求

嗨,我来给你几个简单易上手的解决方案,都是Windows 10原生支持的,不用额外装软件,刚好匹配你的需求——只复制A文件夹里那些B文件夹没有相同前缀(最后一个下划线之前的部分)的文件。

方法一:PowerShell脚本(推荐,正则处理更灵活)

PowerShell是Windows自带的强大工具,处理文件名匹配非常方便。你可以按照以下步骤操作:

  1. 打开PowerShell:按下Win+X,选择“Windows PowerShell”或者“Windows终端(管理员)”(如果文件夹有权限限制的话)
  2. 复制下面的脚本,把其中的C:\Path\To\FolderAC:\Path\To\FolderB改成你实际的文件夹路径
  3. 粘贴到PowerShell里回车运行即可
# 设置源文件夹A和目标文件夹B的路径,请替换成你自己的路径
$sourceDir = "C:\Path\To\FolderA"
$destDir = "C:\Path\To\FolderB"

# 遍历源文件夹中所有.jpg格式的文件
Get-ChildItem -Path $sourceDir -Filter "*.jpg" | ForEach-Object {
    # 使用正则提取文件名前缀:去掉最后一个下划线及后面的所有内容
    $prefix = $_.Name -replace "_[^_]+$", ""
    # 检查目标文件夹中是否存在相同前缀的文件
    $hasMatch = Get-ChildItem -Path $destDir -Filter "$prefix_*.jpg" -ErrorAction SilentlyContinue
    if (-not $hasMatch) {
        # 如果没有匹配的前缀文件,就复制当前文件到目标文件夹
        Copy-Item -Path $_.FullName -Destination $destDir
        Write-Host "已复制:$($_.Name)"
    } else {
        Write-Host "目标文件夹已有相同前缀文件,跳过:$($_.Name)"
    }
}

脚本说明:

  • -replace "_[^_]+$", "" 这段正则的意思是:找到最后一个下划线,然后删除它以及后面的所有字符,得到前缀部分
  • 如果你的文件不只是.jpg格式,可以把-Filter "*.jpg"改成-Filter "*.*"来匹配所有文件

方法二:批处理脚本(适合习惯用CMD的用户)

如果你更习惯用CMD命令行,也可以用批处理来实现,虽然正则处理稍显麻烦,但也能完成需求:

  1. 打开记事本,复制下面的代码,替换文件夹路径
  2. 保存为CopyDiffFiles.bat(注意保存类型选“所有文件”)
  3. 双击这个批处理文件运行
@echo off
:: 设置源文件夹和目标文件夹路径,请替换成实际路径
set "sourceDir=C:\Path\To\FolderA"
set "destDir=C:\Path\To\FolderB"

:: 遍历源文件夹中的所有jpg文件
for %%f in ("%sourceDir%\*.jpg") do (
    :: 提取文件名(不含扩展名和路径)
    set "fileName=%%~nf"
    :: 启用延迟扩展,方便处理变量
    setlocal enabledelayedexpansion
    :: 提取前缀:循环删除最后一个字符直到遇到下划线,再去掉下划线后面的内容
    set "prefix=!fileName!"
    :trimLoop
    if "!prefix:~-1!"=="_" (
        set "prefix=!prefix:~0,-1!"
        goto trimLoop
    )
    :: 检查目标文件夹是否存在相同前缀的文件
    if not exist "%destDir%\!prefix!_*.jpg" (
        copy "%%f" "%destDir%" >nul
        echo 已复制:%%~nxf
    ) else (
        echo 已存在相同前缀,跳过:%%~nxf
    )
    endlocal
)
pause

小提示:

  • 如果运行时提示权限不足,右键点击批处理文件,选择“以管理员身份运行”
  • 两种方法都会在控制台输出操作日志,方便你查看哪些文件被复制了,哪些被跳过了

备注:内容来源于stack exchange,提问作者maudit

火山引擎 最新活动