中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]for内调标签程序段故障
作者:
标题: [求助]for内调标签程序段故障 上一主题 | 下一主题
btpg
新手上路





积分 17
发帖 19
注册 2010-3-22
来自 湖北
状态 离线
『楼 主』:  [求助]for内调标签程序段故障


color a&title 文件名删截
setlocal enabledelayedexpansion
set /p a=请输入你想要留的位数段(如:2-5表示文件名的第二至第五个字符):
for /f "tokens=1,2 delims=-" %%a in ("%a%") do set /a a=%%a-1&set /a b=%%b-%%a+1
set /p c=请输入你想要修改文件的类型(如.jpg):
echo 当文件夹中已存在一个同名文件,提供的解决方案如下:
echo 在同名文件后加上数字后缀,这些同名文件会以filename1%c%,filename2%c%…………的方式被命令
cd aaa
for %%a in (*%c%) do if not "%%a"=="文件名删截.bat" (set d=%%~na
if not exist "じ!d:~%a%,%b%!%c%" (ren "%%a" "じ!d:~%a%,%b%!%c%") else (set /a e=0&call :dellsamename)
)
ren "じ*.*" "*.*"
:dellsamename
set /a e+=1
if not exist "じ!d:~%a%,%b%!%e%%c%" (ren "じ!d:~%a%,%b%!%c%" "じ!d:~%a%,%b%!%e%%c%"&goto :eof) else goto :dellsamename
这个程序是用于对文件名进行删截改名的:某个文件夹里有很多同类型的文件,要把这些所有文件的文件名删截为文件名的指定字符段,而且要使文件名重复时,加上数字后缀,

上面的程序我更改了很多次,分析其运行报告,发现它在上面第二个for 循环总是%%a被替换两次,才调用一次:dellsamename程序段,对两次%%a中的前一个%%a进行处理,纠结了好久,不得其解,请高示下

2010-5-9 00:06
查看资料  发送邮件  发短消息 网志  OICQ (136949034)  编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  


@echo off&setlocal enabledelayedexpansion&color a&title 文件名删截
set/p a=位数段:如2-5&set/p c=文件类型:如.jpg
for /f "tokens=1* delims=-" %%a in ("%a%") do set/a a=%%a-1,b=%%b-a
for %%a in (*%c%) do if /i not "%%a"=="%~nx0" call :d "%%a"
exit
:d
set "d=%%~n1"&set e=
:n
if exist "!d:%a%,%b%!%e%%c%" (set/a e+=1&goto :n) else ren %1 "!d:%a%,%b%!%e%%c%"
[ Last edited by Hanyeguxing on 2010-5-9 at 08:27 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-5-9 00:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: