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%\temp.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%\temp.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%\temp.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