批处理复制文件时同名文件跳过并重命名.

用批处理,源文件在D盘里文件夹soft中,目标文件夹在E盘文件夹micr中,复制soft中文件到micr,当micr中存在此文件,则自动重命名,不可覆盖以前备份的文件,我要实现每次开机自动运行这个批处理,在e盘创建一个备份,每运行一次就多一个备份,运行100次,e盘就有100个备份。
D盘soft中有一个《记录.xls》文件和三个子目录(这个xls文件在SOFT根目录下),我只备份这个xls文件,复制到e盘micr文件夹之后,不创建目录,只看到很多次备份后的xls,重命名可为1.xls 2.xls 3.xls 4.xls 5.xls等,一至往后加。。。

第1个回答  2009-04-29
你要用批处理处理的前提下,总体的思路如下:
1、E盘备份文件命名问题,建议采用以当前日期,时间为文件名。
2、自动行你可以批处理命令加入启动项,或者添加WINDOWS任务计划运行。

@echo off
if exist e:\micr\filename_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.bak goto existfile
goto backupfile

:backupfile
echo 已经找到备份好的备份文件filename_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.bak
echo .
echo !!!提示:正在备份文件....!!!
echo .
copy d:\soft\filename e:\micr\filename_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.bak
goto end

:existfile
echo.
echo !!!备份失败!!!
echo 目标目录中找到已经备份好的文件filename_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.bak
echo.
echo.
echo.
pause
goto end

:end
echo 操作完毕!!!

以上是该目录入某一个文件备份时用,如果整个目录备份,请参照之。
第2个回答  2009-05-06
@echo off
:loop
set /a n+=1
if not exist e:\micr\%n%.xls (copy d:\soft\记录.xls e:\micr\%n%.xls&&goto :eof)
goto loop

rem *************************
rem 星号以上代码另存为xx.bat,放在开始的启动项内,有问题百度HI联系,这个需求用不上FOR。本回答被提问者采纳
第3个回答  2009-04-28
很简单 存在就复制并重命名 不存在直接复制 加入启动项 但看到最后我头晕 了 前面你说把soft中的文件(不止一个吧)复制到micr中 意思就是每次复制文件到同一个文件夹并重复就重命名 最后的意思是要100个备份的文件夹吧
最后的意思应该是你的实际要求 那更简单了 每次复制soft文件夹到E盘并重命名就可以了
第4个回答  2009-04-29
"当micr中存在此文件,则自动重命名",那么,你重命名的规则是什么?

另外,你在soft文件夹中要复制的是否只是该文件夹下的文件?包括目录和子目录下的文件吗?

试试看吧:
@echo off
for /f %%i in ('dir /od /tc /b e:\micr') do (
set filename=%%i
)
set filename=%filename:~0,-4%
set /a filename+=1
if not defined filename set filename=1
REM 下面的a.xls修改成你的文件名
copy d:\soft\记录.xls e:\micr\%filename%.xls
第5个回答  2009-04-28
最强的就是XCOPY了,不过也没有这样的功能.

你不如把目标文件夹搞成不同的,那样备份过去就新建一个文件夹.

每次开机都可以得到一个备份.

如果非要实现这个功能,你就用VC写一个吧,问题应该不大