Board logo

标题: [文件操作] 批处理如何批量命名文件, 有重名文件? [打印本页]

作者: kmustwxw    时间: 2014-12-14 15:47     标题: 批处理如何批量命名文件, 有重名文件?

图片的原始名字为:
最终要命名为:
要批处理代码如何实现?谢谢。
作者: 522235677    时间: 2014-12-14 16:12

不举例说明,谁知道你要干嘛啊
作者: kmustwxw    时间: 2014-12-14 17:01

举例来说明一下:有好多原来的jpg文件名字如下:
0100010005法律具结保证书1.jpg
0100010008法律具结保证书32.jpg
0100010025法律具结保证书23.jpg
0100010041法律具结保证书54.jpg
0100030002法律具结保证书1.jpg
0100030002法律具结保证书22.jpg
0100030002法律具结保证书5.jpg
0100030023法律具结保证书.jpg
0100030023法律具结保证书2.jpg
0100030023法律具结保证书41.jpg
0100030027法律具结保证书32.jpg
0100030031法律具结保证书3.jpg
最后要求改为:如下名字
0100010005法律具结保证书.jpg
0100010008法律具结保证书.jpg
0100010025法律具结保证书.jpg
0100010041法律具结保证书.jpg
0100030002法律具结保证书.jpg
0100030002法律具结保证书1.jpg
0100030002法律具结保证书2.jpg
0100030023法律具结保证书.jpg
0100030023法律具结保证书1.jpg
0100030023法律具结保证书2.jpg
0100030027法律具结保证书.jpg
0100030031法律具结保证书.jpg
代码如何写?
作者: kmustwxw    时间: 2014-12-14 17:03

回复 2# 522235677 我上传的有图片的,可能没有显示出来。我又举例了,帮忙看下。
作者: yiwuyun    时间: 2014-12-14 17:57

本帖最后由 yiwuyun 于 2014-12-14 18:18 编辑

@echo off
setlocal EnableDelayedExpansion
for /f %%a in ('dir .\*.jpg /b') do (
  set a=%%a
  ren %%a !a:~0,9!法律具结保证书.jpg
)
@echo on
试试。
作者: kmustwxw    时间: 2014-12-14 19:02

回复 5# yiwuyun 好像不行,运行毕结果出错。
作者: DAIC    时间: 2014-12-14 19:36

回复 5# yiwuyun


这样是不行的,应为结果里面重复的需要在后面加序号:
0100030002法律具结保证书.jpg
0100030002法律具结保证书1.jpg
作者: apang    时间: 2014-12-14 21:46

本帖最后由 apang 于 2014-12-15 11:01 编辑
  1. @set @n=0;//&dir /b *.jpg|cscript -nologo -e:jscript "%~0" & pause & exit/b
  2. fso = new ActiveXObject("Scripting.FileSystemObject");
  3. while (!WScript.StdIn.AtEndOfStream) {
  4.         f = WScript.StdIn.ReadLine();
  5.         s = f.replace(/(.+?)\d*(\.jpg)$/i, "$1$2");
  6.         n = 0;
  7.         while (fso.FileExists(s) && (f.toLowerCase()!=s.toLowerCase())) {
  8.                 n += 1;
  9.                 s = f.replace(/(.+?)\d*(\.jpg)$/i, "$1" + n + "$2");
  10.         }
  11.         try {
  12.                 fso.GetFile(f).Name = s;
  13.         } catch(e) { WScript.Echo("未处理文件:" + f); }
  14. }
复制代码
有点小问题,改一下
作者: apang    时间: 2014-12-14 23:25

  1. @set @n=0;/* & echo off
  2. set J=cscript -nologo -e:jscript "%~0"
  3. for /f "tokens=1*delims=/" %%a in ('dir /b /on *.jpg^|%J%') do (
  4.         echo Ren "%%a" "%%b"
  5. )
  6. pause & exit/b & rem */
  7. txt = "/\r\n" + WScript.StdIn.ReadAll();
  8. ar = txt.replace(/(.+?)\d*\.jpg$/img, "$&/$1").split("\r\n");
  9. s = ""; n = 0;
  10. for (i=0; i<ar.length-2; i++) {
  11.         a = ar[i].split("/")[1];
  12.         b = ar[i+1].split("/")[1];
  13.         if (a.toLowerCase() == b.toLowerCase()) {
  14.                 n += 1;
  15.                 s += ar[i+1] + "" + n + ".jpg\n";
  16.         } else { n = 0; s += ar[i+1] + ".jpg\n"; }
  17. }
  18. WScript.Echo(s)
复制代码

作者: yiwuyun    时间: 2014-12-15 12:05

@echo off
setlocal EnableDelayedExpansion
for /f %%a in ('dir .\*.jpg /b') do (
  set a=%%a
  set /a line.!a:~0,10!=0
)
for /f %%a in ('dir .\*.jpg /b') do (
  set a=%%a
  set c=!a:~0,10!
  for /f %%b in ('echo !c!') do (
    if "!line.%%b!"=="0" (
      ren %%a !a:~0,10!法律具结保证书.jpg
      set /a line.%%b=!line.%%b!+1
    ) else (
      ren %%a !a:~0,10!法律具结保证书!line.%%b!.jpg
      set /a line.%%b=!line.%%b!+1
    )
  )
)
@echo on
试试这个。
作者: yiwuyun    时间: 2014-12-15 21:13

@echo off
setlocal EnableDelayedExpansion
for /f %%a in ('dir .\*.jpg /b') do (
  set a=%%a
  set /a line.!a:~0,10!=0
)
dir .\*.jpg /b>11.txt
:start
set /p a=<11.txt
for /f "skip=1" %%b in ('type 11.txt') do (
   echo %%b>>22.txt
)
if exist 11.txt del 11.txt
if exist 22.txt ren 22.txt 11.txt
echo %a%
set c=%a:~0,10%
if "!line.%c%!"=="0" (
  ren %a% !a:~0,10!法律具结保证书.jpg
  set /a line.%c%=!line.%c%!+1
) else (
  ren %a% !a:~0,10!法律具结保证书!line.%c%!.jpg
  set /a line.%c%=!line.%c%!+1
)
if not exist 11.txt goto end
goto start
:end
@echo on
再来一个主体部分不用for的语句,这个是测试过的。
作者: kmustwxw    时间: 2014-12-15 21:51

特别感谢大家的无私帮助,从你们写的代码中我又学到了很多。apang写的代码我看不懂,我水平有限,想让大家帮我看看我写的这段如应该如何改写,正在学习。谢谢。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3.    set /a var=0
  4. for /f "tokens=* delims=" %%i in ('dir /b 0*.jpg') do (
  5.     set "file=%%~ni"
  6.     set "name=!file:~0,10!法律具结保证书"
  7.     if not exist "!name!.jpg" (  
  8.        set /a var=0
  9.       ren "%%i" "!name!%%~xi" ) else (   
  10.       set /a var=var+1
  11.       ren "%%i" "!name!!var!%%~xi
  12. )
  13. )
  14. pause
复制代码
运行结果老是不符合要求,请兄弟帮改写下,按上面代码的思路。
作者: apang    时间: 2014-12-15 22:11

如果文件名前17位都是由10位数字+法律具结保证书 构成,可以不用那么麻烦了:
  1. @echo off & setlocal enabledelayedexpansion
  2. set "b= "
  3. for /f "delims=" %%a in ('dir /b /on *法律具结保证书*.jpg')do (
  4.         set "a=%%a"
  5.         if "!a:~,17!" == "!b:~,17!" (
  6.                 set /a n+=1
  7.                 echo,Ren "%%a" "!a:~,17!!n!%%~xa"
  8.         ) else (
  9.                 set "n=0"
  10.                 echo,Ren "%%a" "!a:~,17!%%~xa"
  11.         )
  12.         set "b=%%a"
  13. )
  14. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2