标题: [文件操作] BAT怎样批量命名文件名? [打印本页]
作者: qq544935474 时间: 2013-9-6 20:36 标题: BAT怎样批量命名文件名?
数据恢复相机内存卡卡之后,文件名变了,导致在相机里面无法浏览照片,我手动修改文件名为img_1234,img_1235,img_1236,这样在相机里面才可以看照片,要是十几张我就手动命名了,可是1000多张呢,太累,能不能批处理呢?
作者: 林小七 时间: 2013-9-6 20:53
本帖最后由 林小七 于 2013-9-6 21:31 编辑
回复 1# qq544935474
真是巧~昨天写了个和你说的差不多的脚本~稍微改了下~达到了你的要求~~不满意的地方自己改下或者回帖我~
放在和图片同一目录运行~- @echo off
- set i=1233
- for %%a in (*.jpg) do (
- set /a i=i+1
- @echo %%~fa
- call rename "%%a" "img_%%i%%.jpg"
- )
复制代码
作者: DAIC 时间: 2013-9-6 21:10
来个PowerShell的:
http://bbs.bathome.net/thread-26296-1-1.html
作者: hzcxdgioa 时间: 2013-9-13 00:15
简单说明一下,
这个批处理可以自动识别文件名中的连续数字,别且可以作为变量使用,
我写这个批处理,但是是为了方便重命名连续剧之类的文件,因为那些文件都有几集,几部之类的东西,
确实用ren *。* XX*。* 命令是达不到预期效果的,
于是后来就写了个出来,现在都看不懂了- @echo off
- setlocal enabledelayedexpansion
- if not [%1]==[] (set lname=%1)& goto uud
- :kk
- cls
- set lname=
- set 路径=
- echo 请拖入需要批量重命名的文件以获取相关路径及文件名
- set /p lname=需要修改的文件路径及名称:
- if [%lname%]==[] goto kk
- :uud
- call:a ^\ %lname%
- set 路径=%y%
- call:a . "%x%"
- set 文件名=%y:~0,-1%
- set 后缀=.%x%
- call:b "%文件名%"
- :qqqq
- cls
- set p=
- set /p="路径="<nul
- set lj=%路径%
- :oo
- for /f "delims=\ tokens=1,*" %%a in ("!lj!") do (
- if "%%a"=="" (
- goto sf
- ) else (
- set n=%%a
- set m=!n:~1,1!
- if "!m!"==":" (
- echo.!n!
- ) else (
- echo. \%%a
- )
- set "lj=%%b"
- goto oo
- )
- )
- :sf
- echo 文件= *%后缀%
- echo.
- echo 原名:
- echo %原始%
- echo 格式:
- echo %name%
- echo.
- echo 请将格式〖〗括弧中的数字作为变量使用
- echo 可以使用扩展命令1:6,将会追加变量后的六个字符(不包括变量本身代表的数字)
- echo 同时支持原文件名自由截取任意字符.格式 0:-8,6;
- echo 例如 XXXXX第1话 3:* 1和3作为变量使用
- set /p p=输入新的文件名:
- if not defined p goto qqqq
-
- set f=0
- set f1=0
- set w=0
- echo.^@echo off>"%路径%\撤销重命名.bat"
- echo.:由胡朝旭自制批量重命名批处理生成.以防重命名错误出现的次序混乱^<%date%%time%^>>>"%路径%\撤销重命名.bat"
- echo.set z=0 >>"%路径%\撤销重命名.bat"
- echo.>%temp%\mulu
- for /r "%路径%" %%q in (*%后缀%) do (
- set /a f1=!f1!+1
- echo %%q>>%temp%\mulu
- )
- for /f "delims= tokens=*" %%q in (%temp%\mulu) do (
- set /a f=!f!+1
- call:c "%%~nq"
- call:d "%p%" "%%~nq"
- echo ren "!cname!%后缀%" "%%~nxq" ^>nul 2^>nul^&if %%errorlevel%%==1 set /a z=%%z%%+1>>"%路径%\撤销重命名.bat"
- ren "%%q" "!cname!%后缀%" >nul 2>nul&if errorlevel 1 (
- set /a w=!w!+1
- )
-
- )
- del /q %temp%\mulu
- echo.echo 撤销重命名时出现%%z%%个错误>>"%路径%\撤销重命名.bat"
- echo.pause^>nul>>"%路径%\撤销重命名.bat"
- cls
- echo 需 处 理 文 件总数:%f1%
- echo 实际重命名操作次数:%f%
- echo 出现 未知错误 次数:%w%
- if /i %f1% neq %f% echo.&echo.&echo.&echo 可能出现文件重复重命名情况,请自行修改.任意键继续&pause>nul
- if /i %w% neq 0 pause>nul
- goto kk
- :有时会有将第一个被重命名的文件再添加到列表中重命名一次的问题.
-
-
-
- ::------------------------------------------------------------------------
- :a
- set y=
- set "x=%2"
- set "x=%x:"=%"
- :y
- for /f "delims=%1 tokens=1,*" %%a in ("%x%") do (
- if "%%b"=="" (
- goto EOF
- ) else (
- set "y=%y%%%a%1"
- set "x=%%b"
- goto y
- )
- )
-
-
- ::------------------------------------------------------------------------
- :b
- set "xx=%1"
- set "xx=%xx:"=%"
- set name=
- set 原始=
- set 列=0
- set 初始值=0
- :st
- set "l=!xx:~%初始值%,1!"
- if "%l%"=="" goto EOF
- :mm
- if /i !l! leq 9 (
- if /i !l! geq 0 (
- set /a 列=!列!+1
- set "原始=!原始!〖!l!"
- goto nn
- )
- )
- set /a 初始值=!初始值!+1
- set "name=!name!!l!"
- set "原始=!原始!!l!"
- goto st
- :nn
- set /a 初始值=!初始值!+1
- set "l=!xx:~%初始值%,1!"
- if "%l%"=="" (
- set "name=!name!〖!列!〗"
- set "原始=!原始!〗"
- goto EOF
- )
- if /i !l! leq 9 (
- if /i !l! geq 0 (
- set "原始=!原始!!l!"
- goto nn
- )
- )
- set "name=!name!〖!列!〗"
- set "原始=!原始!〗"
- goto st
- ::------------------------------------------------------------------------
- :c
- set "xx=%1"
- set "xx=%xx:"=%"
- set 列=1
- set 初始值=0
- set "l=!xx:~%初始值%,1!"
- :st2
- if "%l%"=="" goto EOF
- :mm2
- if /i !l! leq 9 (
- if /i !l! geq 0 (
- set "p=!l!"
- goto nn2
- )
- )
- set /a 初始值=!初始值!+1
- set "l=!xx:~%初始值%,1!"
- goto st2
- :nn2
- set /a 初始值=!初始值!+1
- set "l=!xx:~%初始值%,1!"
- if "%l%"=="" goto EOF
- if /i !l! leq 9 (
- if /i !l! geq 0 (
- set "p=!p!!l!"
- goto nn2
- )
- )
- set %列%=%p%
- set /a 列=!列!+1
- set p=
- goto st2
-
-
- ::------------------------------------------------------------------------
- :d
- set "xx=%1"
- set "xx=%xx:"=%"
- set "yy=%2"
- set "yy=%yy:"=%"
- set cname=
- set 初始值=0
- :st3
- set "l=!xx:~%初始值%,1!"
- set /a 初始值=!初始值!+1
- set "l1=!xx:~%初始值%,1!"
- if /i !l! equ 0 (
- if "!l1!"==":" ( call:pp "%yy%") else (
- set /a 初始值=!初始值!-1
- set "cname=!cname!!yy!"
- )
- )
- set /a 初始值=!初始值!-1
- set "l=!xx:~%初始值%,1!"
- if "%l%"=="" goto EOF
- :mm3
- if /i !l! leq 9 (
- if /i !l! geq 0 (
- set "k=!k!!l!"
- goto nn3
- )
- )
- set /a 初始值=!初始值!+1
- set "cname=!cname!!l!"
- goto st3
- :nn3
- set /a 初始值=!初始值!+1
- set l=!xx:~%初始值%,1!
-
- if "%l%"=="" (
- set "cname=!cname!!%k%!"
- set k=
- goto EOF
- )
- if /i !l! leq 9 (
- if /i !l! geq 0 (
- set "k=!k!!l!"
- goto nn3
- )
- )
- set "cname=!cname!!%k%!"
- set k=
- goto st3
-
-
- ::------------------------------------------------------------------------
- :pp
- set tt=
- set "x2=%1"
- set "x2=%x2:"=%"
- :pl
- set /a 初始值=!初始值!+1
- set "l=!xx:~%初始值%,1!"
- if "!l!"==";" (
- set "cname=!cname!!x2:~%tt%!"
- set /a 初始值=!初始值!+2
- goto EOF
- ) else (
- set "tt=%tt%%l%"
- goto pl
- )
- :EOF
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |