标题: [文件操作] 批处理如何批量命名文件, 有重名文件? [打印本页]
作者: 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 编辑
- @set @n=0;//&dir /b *.jpg|cscript -nologo -e:jscript "%~0" & pause & exit/b
-
- fso = new ActiveXObject("Scripting.FileSystemObject");
- while (!WScript.StdIn.AtEndOfStream) {
- f = WScript.StdIn.ReadLine();
- s = f.replace(/(.+?)\d*(\.jpg)$/i, "$1$2");
- n = 0;
- while (fso.FileExists(s) && (f.toLowerCase()!=s.toLowerCase())) {
- n += 1;
- s = f.replace(/(.+?)\d*(\.jpg)$/i, "$1" + n + "$2");
- }
- try {
- fso.GetFile(f).Name = s;
- } catch(e) { WScript.Echo("未处理文件:" + f); }
- }
复制代码
有点小问题,改一下
作者: apang 时间: 2014-12-14 23:25
- @set @n=0;/* & echo off
- set J=cscript -nologo -e:jscript "%~0"
- for /f "tokens=1*delims=/" %%a in ('dir /b /on *.jpg^|%J%') do (
- echo Ren "%%a" "%%b"
- )
- pause & exit/b & rem */
-
- txt = "/\r\n" + WScript.StdIn.ReadAll();
- ar = txt.replace(/(.+?)\d*\.jpg$/img, "$&/$1").split("\r\n");
- s = ""; n = 0;
- for (i=0; i<ar.length-2; i++) {
- a = ar[i].split("/")[1];
- b = ar[i+1].split("/")[1];
- if (a.toLowerCase() == b.toLowerCase()) {
- n += 1;
- s += ar[i+1] + "" + n + ".jpg\n";
- } else { n = 0; s += ar[i+1] + ".jpg\n"; }
- }
- 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写的代码我看不懂,我水平有限,想让大家帮我看看我写的这段如应该如何改写,正在学习。谢谢。- @echo off
- setlocal enabledelayedexpansion
- set /a var=0
- for /f "tokens=* delims=" %%i in ('dir /b 0*.jpg') do (
- set "file=%%~ni"
- set "name=!file:~0,10!法律具结保证书"
- if not exist "!name!.jpg" (
- set /a var=0
- ren "%%i" "!name!%%~xi" ) else (
- set /a var=var+1
- ren "%%i" "!name!!var!%%~xi
- )
- )
- pause
复制代码
运行结果老是不符合要求,请兄弟帮改写下,按上面代码的思路。
作者: apang 时间: 2014-12-15 22:11
如果文件名前17位都是由10位数字+法律具结保证书 构成,可以不用那么麻烦了:- @echo off & setlocal enabledelayedexpansion
- set "b= "
- for /f "delims=" %%a in ('dir /b /on *法律具结保证书*.jpg')do (
- set "a=%%a"
- if "!a:~,17!" == "!b:~,17!" (
- set /a n+=1
- echo,Ren "%%a" "!a:~,17!!n!%%~xa"
- ) else (
- set "n=0"
- echo,Ren "%%a" "!a:~,17!%%~xa"
- )
- set "b=%%a"
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |