批处理复制最新的文件夹里面的bmp文件到指定目录
![](http://img.baidu.com/img/iknow/icn_point.gif)
A机为服务器,B机为普通电脑。两台电脑里的共享文件均可以互访。
B机里面有一个文件夹“D:\question\new”里面有随机命名的文件夹。而且经常更新。
要求:在A机上运行批处理命令B.bat。批处理要达到的结果为:
要将B机D盘“question”里的“new”文件夹里最后建立的一个文件夹中的所有bmp文件复制到A机的E盘的old文件夹下。而且,如果A机E盘old文件夹里有同名文件,则把复制过来的文件的文件名前面加字母“n”。
问题补充:
谁回答的正确,分数就给谁,不分先后,命令不分长短。只要能达到目的就可以了。
补充:B电脑的IP为192.168.1.102
破人破天的批处理运行没效果,系统提示CMD不支持将UNC路径作为当前目录。不过这个问题可以解决,就是先在批处理中映射网络驱动器,复制完了再断开就好了。
200分高分悬赏完美解决方案,最好解释每条命令的函意。
B电脑D盘question目录里面的new里面只有目录,没有文件,而且子目录里面只有文件再没有目录了。如果复制过来后有重名就在前面加n,如果加n后还重复就覆盖。当然,搞成自动编号也行。
测试成功!
我不会映射网络驱动器,你先写一个批处理:
第一行:把B的D盘映射为Z盘
第二行:call B.bat
第三行:断开Z盘
我为你写的B.bat:
功能是将A机Z盘“question”里的“new”文件夹里最后建立的一个文件夹中的所有bmp文件复制到A机的E盘的old文件夹下。而且,如果A机E盘old文件夹里有同名文件,则把复制过来的文件的文件名前面加字母“n”。
有三个函数,findnewfolder函数找出某个文件夹里最新的文件夹;
copyandrename函数是智能复制,如果重名的话文件名加上n并递归;
main函数是主函数,先调用findnewfolder,找不到的话给出错误信息,否则对findnewfolder给出的文件夹里面所有的bmp文件调用copyandrename.
(都用的是很简单的语句,你一定能看懂)
@echo off
setlocal enabledelayedexpansion
call:main
pause
endlocal
goto :eof
:main
if not exist E:\old md E:\old
call:findnewfolder "Z:\question\new"
if "!answer!"=="" (
echo Z:\question\new里找不到文件夹
exit /b
)
for /f "delims=" %%i in ('dir /a:-d /b /s "!answer!"\*.bmp') do (
call:copyandrename "%%i" "E:\old\%%~nxi"
)
exit /b
:findnewfolder
for /f "delims=" %%i in ('dir /a:d /b /o:-d %1') do (
set "answer=%~1\%%i"
exit /b
)
set "answer="
exit /b
:copyandrename
if not exist %2 (
copy %1 %2
exit /b
) else (
call:copyandrename %1 "%~dp2n%~nx2"
exit /b
)