中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 09:02
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]for内调标签程序段故障 查看 899 回复 1
楼 主 [求助]for内调标签程序段故障 发表于 2010-05-09 00:06 ·  中国 湖北 武汉 教育网
新手上路
积分 17
发帖 19
注册 2010-03-22 20:52
16年会员
UID 162805
性别 男
来自 湖北
状态 离线

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进行处理,纠结了好久,不得其解,请高示下
2 发表于 2010-05-09 00:39 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
@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 ]
论坛跳转: