返回列表 发帖

[文件操作] [已解决]批处理如何复制文件到首字母文件夹并解决重名问题

文件夹images下的子文件夹是以单个字母(A、B、C等)或单个数字(1、2、3等)或单个其它字符(#、_等)命名的,文件是以首字母分们别类的放在各子文件夹中的,比如big.jpg bad.jpg等是放在子文件B中的。
我平时零星收集的图片都放在D:\photos文件夹下,达到一定数量就统一更新一次图片,也就是将收集的图片分类复制到images的子文件夹中。
重名文件按以下规则处理:比如要复制big.jpg到B文件夹。如果文件夹中不存在big.jpg,直接复制过来;如果存在,复制过来时重命名为big (2).jpg(源文件不改名);如果存在big (2).jpg,重命名为big (3).jpg,依此类推。

回复 2# xczxczxcz
谢谢,虽然ps版本太低用不了,先收下。

TOP

回复 4# WHY
太感谢了,非常好用。

TOP

自己也写了一个。要复制的文件和批处理文件放到与单字符文件夹同一目录:
@echo off
setlocal enabledelayedexpansion
for %%a in (*.jpg) do (
    set x=%%a
    set x=!x:~0,1!
    if not exist "!x!\%%a" (copy "%%a" "!x!\") else (
        if not exist "!x!\%%~na (2).jpg" (copy "%%a" "!x!\%%~na (2).jpg") else (
            set n=2
            for /f "delims=" %%b in ('dir /b /a-d !x!\*^|findstr /r /be /c:"%%~na ([0-9][0-9]*).jpg"') do (
                set "str=%%~nb"
                set "m=!str:%%~na (=!"
                set "m=!m:)=!"
                if !m! gtr !n! set /a n=m
            )
            set /a n+=1
            copy "%%a" "!x!\%%~na (!n!).jpg"
        )
    )
)
pauseCOPY

TOP

返回列表