. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 关闭主题
 
主题工具
asap
 
asap 的头像
核心会员
 
资 料:
注册日期: Mar 2000
帖子: 2,969 声望值: 4
精华: 1,解答: 29
#16 旧 2010-09-02, 09:41:30 默认
asap 当前离线  

版本2.1, 修正for (*.mkv) 导致的奇怪问题。

::version 2.1
@echo off && setlocal enabledelayedexpansion

for %%m in (*.mkv) do (
set file_l=%%m
set file_ext=%%~xm
for %%i in ("%%~nm") do set file_1=%%~ni
call :make_target !file_1!
echo start "" /b /i ren "!file_l!" "!file_target!"
)
goto end

:make_target
for /f "eol=; tokens=1-4* delims=.-" %%a in ("%1") do set file_target=[%%d]%%e.%%b.%%a-%%c!file_ext!
goto:eof

:end
endlocal && @echo on


We see what we want to see. We hear what we want to hear. We believe what we want to believe.
mouze
 
mouze 的头像
热心会员
 
资 料:
注册日期: Apr 2002
帖子: 8,207 声望值: 13
精华: 5,解答: 65
#17 旧 2010-09-02, 11:57:24 默认
mouze 当前离线  

asap兄的思路非常棒,参考asap兄的思路,我也推出一个“简练版”:
代码:
@echo off
for %%M in (*.mkv) do call:ren "%%M" "%%~nM"
goto :eof

:ren
set letter1=%1
if "%letter1:~1,1%"=="[" goto :eof
for /f "tokens=1-4* delims=-." %%A in ("%~n2") do echo ren %1 "[%%D]%%E.%%B.%%A-%%C%~x1"
goto :eof
这个版本,仍然只处理 非“[”开头的*.mkv文件,可以处理包含 & ! 空格 等特殊字符的文件。当然,依然无法处理字母大小写。

此帖于 2010-09-03 09:30:03 被 mouze 编辑. .
asap
 
asap 的头像
核心会员
 
资 料:
注册日期: Mar 2000
帖子: 2,969 声望值: 4
精华: 1,解答: 29
#18 旧 2010-09-02, 13:49:19 默认
asap 当前离线  

版本2.2, 实现首字母大写。

::version 2.2
@echo off && setlocal enabledelayedexpansion

for %%m in (*.mkv) do (
set file_l=%%m
set file_ext=%%~xm
for %%i in ("%%~nm") do set file_1=%%~ni
call :make_target !file_1!
echo start "" /b /i ren "!file_l!" "!file_target!"
)
goto end

:make_target
for /f "tokens=1-4* delims=.-" %%a in ("%1") do (
set sA=%%a
set sB=%%b
set sC=%%c
set sE=.%%e
call :UpperCase sA
call :UpperCase sB
call :ExtraCase sC
call :CamelCase sE && set sE=!sE:~1!
set file_target=[%%d]!sE!.!sB!.!sA!-!sC!!file_ext!
)
goto:eof

:UpperCase
for %%j in ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I" "j=J" "k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R" "s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z") do call set "%1=%%%1:%%~j%%"
goto:eof

:ExtraCase
for %%j in ("halfcd=HalfCD") do call set "%1=%%%1:%%~j%%"
goto:eof

:CamelCase
for %%j in (".a=.A" ".b=.B" ".c=.C" ".d=.D" ".e=.E" ".f=.F" ".g=.G" ".h=.H" ".i=.I" ".j=.J" ".k=.K" ".l=.L" ".m=.M" ".n=.N" ".o=.O" ".p=.P" ".q=.Q" ".r=.R" ".s=.S" ".t=.T" ".u=.U" ".v=.V" ".w=.W" ".x=.X" ".y=.Y" ".z=.Z") do call set "%1=%%%1:%%~j%%"
goto:eof

:end
endlocal && @echo on

运行效果如下:
上传的图像
文件类型: jpg t1003424.jpg (50.4 KB, 55 次查看)

此帖于 2010-09-02 23:51:40 被 asap 编辑. . 原因: .q=.Q .y=.Y
mouze
 
mouze 的头像
热心会员
 
资 料:
注册日期: Apr 2002
帖子: 8,207 声望值: 13
精华: 5,解答: 65
#19 旧 2010-09-02, 15:07:02 默认
mouze 当前离线  

不错不错!asap兄的方案完美了!批处理中转换大小写可真是体力活!
wgf4242
 
wgf4242 的头像
热心会员
 
资 料:
注册日期: Aug 2001
帖子: 6,814 声望值: 6
精华: 0,解答: 38
#20 旧 2010-09-02, 20:42:11 默认
wgf4242 当前离线  

:ExtraCase
for %%j in ("halfcd=HalfCD") do call set "%1=%%%1:%%~j%%"

call set "%1=%%%1:%%~j%%" 也没懂.这是call什么呢? 打出来是挨个call set xx=xxx...call set是什么?
------------------------
查了一下..call也起延时变量的作用...
%%      %%
  %1:%%~j
 
!%1:%%~j!
是一个效果吧?




求解释.3Q

此帖于 2010-09-02 21:51:58 被 wgf4242 编辑. .
DLDLIS
 
DLDLIS 的头像
核心会员
 
资 料:
注册日期: Mar 2001
帖子: 2,509 声望值: 3
精华: 4,解答: 9
#21 旧 2010-09-02, 20:50:35 默认
DLDLIS 当前离线  

我通常的做法是用TC把文件名清单输出到TXT,用UE之类的软件处理后,再通过BAT完成处理。
原始一点,但是简单。
hnlyzhd
 
hnlyzhd 的头像
热心会员
 
资 料:
注册日期: Dec 2006
帖子: 6,181 声望值: 4
精华: 5,解答: 96
#22 旧 2010-09-02, 22:13:36 默认
hnlyzhd 当前离线  

asap兄的批处理实在是太牛了,让人佩服的五体投地,用批处理这么多年,也没有想到还有这么精妙的用法,平常学东西太不求甚解了,不过,确实是有点儿复杂,没点儿功夫,连看懂也不容易。

@wgf4242 将批处理中的@echo off语句去掉,然后加几个测试命令,运行一下批处理就知道效果了,如下:

:: 1. 测试用批处理代码
set sC=halfcd2
call :ExtraCase sC
echo sC=%sC%
goto :eof

:ExtraCase
for %%j in ("halfcd=HalfCD") do call set "%1=%%%1:%%~j%%"
goto:eof


运行结果:

D:\TEMP>renamefile.cmd

D:\TEMP>set sC=halfcd2

D:\TEMP>call :ExtraCase sC

D:\TEMP>for %j in ("halfcd=HalfCD") do call set "sC=%sC:%~j%"

D:\TEMP>call set "sC=%sC:halfcd=HalfCD%"

D:\TEMP>goto:eof

D:\TEMP>echo HalfCD2
HalfCD2

D:\TEMP>goto :eof


通过这个执行过程你就应该明白了,不过,我下次还是不能保证自己能够写出来这种有技巧的代码。
wgf4242
 
wgf4242 的头像
热心会员
 
资 料:
注册日期: Aug 2001
帖子: 6,814 声望值: 6
精华: 0,解答: 38
#23 旧 2010-09-02, 22:50:59 默认
wgf4242 当前离线  

引用:
作者: hnlyzhd 查看帖子
asap兄的批处理实在是太牛了,让人佩服的五体投地,用批处理这么多年,也没有想到还有这么精妙的用法,平常学东西太不求甚解了,不过,确实是有点儿复杂,没点儿功夫,连看懂也不容易。@wgf4242 将批处理中的@echo off语句去掉,然后加几个测试命令,运行一下批处理就知道效果了,如下:[shell][color=l......
没错没错...我也测了一下..找了找感觉.

我已经把这个当模板保存起来了...
pomuyu
 
pomuyu 的头像
高级会员
 
资 料:
注册日期: Jul 2010
帖子: 815 声望值: 3
精华: 0,解答: 44
#24 旧 2010-09-03, 14:34:32 默认
pomuyu 当前离线  

拜楼上几位批处理高人。

自己遇到这种情况估计跟21楼差不多,不过“用UE之类的软件处理”后的文本可以直接导入TC的批量重命名工具中,重命名后有异常还可以方便的撤销一下。这样可能稍微省点脑力,不过自动化程度要比批处理差远了。嗯,其实关键是根本写不出这样的批处理来,所以收藏有空学习一下。

另外,话说XP命令行自带的中文帮助有些让我看的一愣一愣的,不知道是谁给翻译的。。


关于笔记本机械硬盘数据恢复的求助帖,请您指点:
https://bbs.et8.net/bbs/showthread.php?p=17310314#post17310314
发表新主题 关闭主题

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 01:48:16.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号