Board logo

标题: [已结]如何判断已有的文件夹名并自动按顺序重命名? [打印本页]

作者: martin325     时间: 2006-4-8 13:29    标题: [已结]如何判断已有的文件夹名并自动按顺序重命名?
如题。 举例:在纯DOS下,D盘上已存在F0、F1、F2、F3四个文件夹,现在要自动判断,如果存在F1、F2、F3文件夹,就自动把F0重命名为F4; 如果D盘上已存在F1、F2、F3、F4四个文件夹,再自动判断,并自动把F0重命名为F5,等等。 这样的批处理应该怎么写? 最好避免使用第三方工具,DOS环境:MS-DOS v7.1 请高手指点! 先谢谢了:) [ Last edited by willsort on 2006-4-10 at 12:30 ]

作者: martin325     时间: 2006-4-8 16:00
为什么 if exist D:\F3 ren D:\F3 F4 无效 显示无语法错误 但是F3没有被重命名为F4 在D盘下,输入 if exist D:\F3 ren F3 F4 也是一样! 这是什么缘故? 请教……

作者: martin325     时间: 2006-4-8 16:05
但是如果输入: @echo off D: ren F3 F4 可以把F3重命名为F4的 这个是在纯DOS下试的 为什么加了“if exist”语句就不行了呢?而且DOS也未显示语法错误的提示。

作者: willsort     时间: 2006-4-8 17:01
Re martin325: 在线编写的一段代码,可以按照F0~F9的顺序,将第一个存在的目录改名为其后的第一个不存在的目录。注意:代码未经任何有效性测试,请在谨慎、全面测试无误后再投入使用!
@echo off
if not "%1"==":" %0 : F0 F1 F2 F3 F4 F5 F6 F7 F8 F9

:LoopSrc
if "%2"=="" goto error
shift
if not exist "d:\%1\nul" goto LoopSrc
set src=%1

:loopDst
if "%2"=="" goto error
shift
if exist "d:\%1\nul" goto LoopDst
set dst=%1

ren "d:\%src%" "%dst%"

if exist "d:\%dst%\nul" goto clear

:error
echo.
echo Error: Not found src/dst, or rename fail! 
echo.

:clear
for %%e in (src dst) do set %%e=

:end
[ Last edited by willsort on 2006-4-8 at 17:29 ]

作者: martin325     时间: 2006-4-8 17:22
谢谢willsort:) 请教goto loop1的loop1的标签在哪儿? 刚才测试,当只有文件夹F0存在时,可以把F0重命名为F1; 当F1、F2存在时,显示错误提示:Label not found.

作者: martin325     时间: 2006-4-8 17:26
如果文件夹F0、F1……F9是隐藏属性的,不知行不行? 本人先去试试……

作者: martin325     时间: 2006-4-8 18:08
成功了! 高手不愧是高手! 佩服中……

作者: martin325     时间: 2006-4-9 08:13
为什么在批处理调用上面的一段代码就不行了呢? 单独运行是正常的! 是不是需要先清空变量,如何设置? 请指教!

作者: martin325     时间: 2006-4-9 10:36
找到原因了: 把上面willsort提供的批处理命名为ren.bat或者rename.bat时,由于ren、rename本身是DOS的内部命令,故这样命名的批处理当作单条的ren命令来执行了。 呵呵……

作者: martin325     时间: 2006-4-9 11:55
不知道这样的理解对不对? 自己也搞糊涂了。

作者: MIN     时间: 2006-4-9 13:59
那么难懂的, if not "%1"==":" %0 : F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 这句该如何理解?