标题: [求助]for内调标签程序段故障
[打印本页]
作者: btpg
时间: 2010-5-9 00:06
标题: [求助]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进行处理,纠结了好久,不得其解,请高示下
作者: Hanyeguxing
时间: 2010-5-9 00:39
@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 ]