• bat如何实现图片与名字匹配重命名


    背景:有一批图片按顺序截取,需要按照规定的名称进行重名命。

    问题:用批处理怎么实现呢?(公司电脑手动重名时,卡的不要不要的)

    No1:解决:将规定的名称放入criterion.txt中,将批处理Rename.bat文件、criterion.txt以及要处理的图片放到同一目录下,运行bat文件即可。

    步骤:1,先创建一个criterion.txt,将规定的名称放入文本中

    2,将以下代码放入Rename.bat文件中

    @echo off&setlocal enabledelayedexpansion
    title ::rename tool
    color 0a
    dir /b *.png >png.txt
    (for /f %%i in (png.txt) do (
       rem echo %%~ni
        set /p newName=
        echo  %%~ni.png !newName!.png
    ))<criterion.txt
    
    pause

     3,将需要重命名的图片放到该目录下。运行bat文件。

    注:若重命名时,命名出现空格,需使用双引号引起来。

    ==================================分割线===================================

     No2:以上是最初的一个需求。重命名的规范中前缀是需要变动的(按不同的code命名),而且要将改好的放入文件夹中。直接上代码:

    @echo off&setlocal enabledelayedexpansion
    title ::rename tool
    color 0a
    rem +++++++++++++++++++++++++++++++++++++++++++
    rem   OneKeyRename.bat
    rem          By zhzw @2017/5/4
    rem   
    rem            Version: 1.2
    rem +++++++++++++++++++++++++++++++++++++++++++
    
    set /p folderName=InputFolderName:
    set /p code=InputCountryCode:
    for /f "delims=- tokens=2" %%i in (criterion.txt) do (
        set "update=%code%_%%i"
        echo !update!>>temp.txt
    )
    rem 也可以这样写
    rem for /f "delims=" %%a in ('dir /b "%~dp0*.png"') do (echo %%a)
    (for /r %cd% %%j in (*.png) do (
        set /p newName=
        ren "%%~nj.png" "!newName!.png"
    ))<temp.txt
    
    del %cd%	emp.txt
    rem md or mkdir
    mkdir "%cd%\%folderName%"
    move "%cd%*.png" "%cd%\%folderName%" 
    echo OK !
    pause

     ==================================分割线===================================

    No3:在上次的代码上进行优化,文件夹的名字也需要按照规定的命名(name.txt)。且名字中含有code.

    @echo off&setlocal enabledelayedexpansion
    title ::rename tool
    color 0a
    rem +++++++++++++++++++++++++++++++++++++++++++
    rem   OneKeyRename.bat
    rem          By zhzw @2017/5/20
    rem   
    rem            Version: 1.3
    rem +++++++++++++++++++++++++++++++++++++++++++
    
    set /p code=InputCountryCode:
    rem ping 127.0.0.1 -n 2 >nul
    rem findstr "CN" name.txt | cmd /v /c "set /p var=&echo !var!"
    :search
    findstr "/c:-%code%" name.txt 
    rem 简单理解为 0表示成功,1表示失败
    if not %errorlevel%== 0 (
        echo Not exist ! &goto :end
    ) else (
        for /f %%i in ('findstr "/c:-%code%" name.txt') do (
            echo Create folder ...
            if exist %%i (
                echo The folder exist !
            ) else (
                mkdir "%cd%\%%i"
            )
            echo Rename files ...
            rem call调用后,%%i处于关闭状态,先保存%%i再使用%1调用
            rem 或者在call前面set一个变量来保存%%i,然后再来调用这个变量  
            call :rename %%i
            :move
            echo Move files ...
            del "%cd%	emp.txt"
            move "%cd%*.png" "%cd%\%1" 1>nul        
            echo OK
            goto :end
        )
    )
    :rename
    for /f "delims=- tokens=2" %%j in (criterion.txt) do (
        set "update=%code%_%%j"
        echo !update!>>temp.txt
    )
    ( for /r %cd% %%k in (*.png) do (
        rem 使用call时,需要注意循环。可能会出现死循环,需要跳出for循环 
        set /a a+=1
        set /p newName=
        ren "%%~nk.png" "!newName!.png"
        if !a! == 11 goto :move    
    ))<temp.txt
    :end
    timeout /t 2 &exit
    pause  

      ==================================分割线===================================

    No4.来个最终版本,从android设备中提取图片(存在9.10.11张图才会进行重命名),从name.txt中获取folder名字并创建folder,且把重命名的文件放入folder中.当然相应的也需要稍微修改criterion.txt中的数据.(  ^S*.*g   注意不需要加双引号,匹配Screenshots.png 或者Screenshots.jpg等的图片)

    修改后的criterion.txt:

    @echo off&setlocal enabledelayedexpansion
    title Import-and-Rename
    color 0a
    @mode con lines=35 cols=75
    :comment
    set a=0
    set b=0
    set c=0
    cls
    color 0a
    rem +++++++++++++++++++++++++++++++++++++++++++
    rem   OneKeyImportRename.bat
    rem          By zhzw @2017/5/22
    rem   
    rem            Version: 1.4
    rem +++++++++++++++++++++++++++++++++++++++++++
    echo.
    echo                              注意事项!!!
    echo.
    echo 1.截图必须为criterion.txt对应的顺序
    echo.
    echo 2.打开USB,连接设备,勾选总是允许USB调试.输入code(如:US)即可.
    echo.
    echo 3.若运行中出现异常请根据提示操作(不要操作criterion.txt,name.txt文件).
    echo.
    echo ==================================== end ================================
    
    rem ======================================================================
    :input
    color 0a
    set /p code=InputCountryCode:
    :search
    findstr "/c:-%code%" name.txt >nul
    if not %errorlevel%== 0 (
        color 0d
        echo Not exist. Please reenter
        ping 127.0.0.1 -n 3 >nul
        goto :input
    ) else (
        for /f "delims=" %%i in ('findstr "/c:-%code%" name.txt') do (
            set "i=%%i"
            echo.
            if not exist %cd%\%%i (
                echo Create folder ...
                echo folder name = %%i
                mkdir "%cd%\%%i"
                echo Create successful!
            ) else ( 
                echo Create folder ...
                echo This folder already exists!
                echo Do you want to overwrite this folder ? 
                echo "Yes" Please press Enter Key to continue.
                echo "NO"  Please close this window.
                pause >nul
            ) 
            rem 因为%%i中存在空格.传递参数时,会以空格为准,出现多个参数.
            rem call :rename %%i
            rem :move
            rem echo %1
            rem ---------------------------------------------------
            call :rename 
            :move
            echo Rename successful!
            del "%cd%	emp.txt"
            echo Move files ...
            move "%cd%*.png" "%cd%!i!" 1>nul
            echo.
            echo It's OK
            goto :end1
        )
    )
    rem ========================================================================
    :rename
    adb devices|findstr "device$" 1>nul 2>nul
    if not %errorlevel%== 0 (
        echo Devices not connected !
        echo Please check whether the USB is turned on.
        goto :end2
    )
    echo Import screenshots into the current folder ...
    rem You need to pay attention to the version of adb
    rem adb pull /sdcard/DCIM/Screenshots/ "%cd%" 1>nul 2>nul
    adb pull /sdcard/Pictures/Screenshots/ "%cd%" 1>nul 2>nul
    echo.
    ping 127.0.0.1 -n 3 >nul
    if not exist %cd%^S*.*g (
        echo Import pictures failure !
        echo Please check the "allow the debug?" whether always allow?&goto :end2
    ) 
    rem Count the number of pictures.
    for /f %%i in ('dir /b %cd%^S*.*g') do (
        set /a a+=1
    )
    if %a% equ 9 (
        echo Successfully import %a% pictures !
        rem Modify code and Transfer new names to temp.txt
        for /f "eol=. delims=- tokens=2" %%j in (criterion.txt) do (
            set "update=%code%_%%j"
            echo !update!>>temp.txt
        )
        echo Rename files ...
        rem Using adb pull pictures is ascending sort 
        rem Using /r or /f is descending sort (dir /b /od)
        ( for /r %cd% %%k in (^S*.*g) do ( 
            set /a b+=1
            set /p newName=
            echo %%~nxk --^>"!newName!.png"
            ren %%~nxk "!newName!.png"
            if !b! == %a% goto :move    
        ))<temp.txt    
    ) else (
        if %a% equ 10 (
            echo Successfully import %a% pictures !
            for /f "delims=- tokens=2" %%j in (criterion.txt) do (
                set /a c+=1
                if !c! == 11 (
                    set update=""
                ) else (
                    set update=%code%_%%j
                    echo !update!>>temp.txt
                )            
            )
            echo Rename files ...
            ( for /r %cd% %%k in (^S*.*g) do ( 
                set /a b+=1
                set /p newName=
                echo %%~nxk --^>"!newName!.png"
                ren %%~nxk "!newName!.png"
                if !b! == %a% goto :move    
            ))<temp.txt    
        ) else (
            if %a% equ 11 (
                echo Successfully import %a% pictures !
                for /f "delims=- tokens=2" %%j in (criterion.txt) do (
                    set update=%code%_%%j
                    echo !update!>>temp.txt
                )
                echo Rename files ...
                ( for /r %cd% %%k in (^S*.*g) do (
                    set /a b+=1
                    set /p newName=
                    echo %%~nxk --^>"!newName!.png"
                    ren %%~nxk "!newName!.png"
                    if !b! == %a% goto :move    
                ))<temp.txt
            ) else (
                color 0d
                echo Successfully import %a% pictures !
                echo The total number of pictures is error!
                echo Please check the total number of pictures.&goto :end2
            )
        )
    )
    rem =========================================================================
    :end1
    timeout /t 5 &goto :comment
    :end2
    echo Please operate according to the prompt.
    timeout /t 10 &goto :comment
    pause
    View Code
  • 相关阅读:
    PHP编译安装
    PHP编译安装
    Apache编译安装
    Apache编译安装
    端口号
    端口号
    初步理解TCP/IP网络
    初步理解TCP/IP网络
    剑指offer——树的子结构
    STL四种智能指针
  • 原文地址:https://www.cnblogs.com/zeo-to-one/p/6803408.html
Copyright © 2020-2023  润新知