中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何查验文件大小以确定是否复制
作者:
标题: [已结]如何查验文件大小以确定是否复制 上一主题 | 下一主题
youaoyi
初级用户





积分 154
发帖 67
注册 2007-10-31
状态 离线
『楼 主』:  [已结]如何查验文件大小以确定是否复制

目的:在一个没有键盘鼠标的PC机上插入移动硬盘后,自动复制某目录下的文件夹及文件至指定目录。

当前已完成:以下批处理已经可以实现%yidong%\自动复制\ 全目录复制的上述目的,批处理文件附后。

请教:如何核查“D:\视频文件”目录下已存在的文件,如果同名文件大于或者等于移动硬盘\自动复制\ 目录下的文件,则跳过。如果目标目录中同名文件小于移动硬盘上的文件,或者没有该文件则进行覆盖或复制。


-= Autorun.bat =-
:ZDFZUPWJ
@echo off
mode con cols=40 lines=16 &color CF
title ☆ 复制移动硬盘文件 ☆
echo.
echo.
echo.
echo.
echo          是否复制移动硬盘的文件?  
echo.
echo          如不复制请立即关闭窗口,
echo.
echo          否则将在15秒后开始复制。
echo.
ping -n 15 127.0.0.1 >nul 2>nul
echo.
echo.
for %%i in (c d e f g h i j k l m n o p q r s t) do @fsutil fsinfo drivetype %%i:>>%tmp%\tempdriverinfo.txt
findstr /i "可移动驱动器" %tmp%\tempdriverinfo.txt >nul 2>nul
if errorlevel 1 echo    未发现移动设备 ! 请按任意键继续 ! & pause >nul & del %tmp%\tempdriverinfo.txt & goto ZDFZUPWJ
findstr /i "可移动驱动器" %tmp%\tempdriverinfo.txt >%tmp%\tempdriverinfo2.txt
del %tmp%\tempdriverinfo.txt >nul 2>nul
for /f "tokens=1" %%i in (%tmp%\tempdriverinfo2.txt) do @set yidong=%%i
del %tmp%\tempdriverinfo2.txt >nul 2>nul
set srcDir="%yidong%\"
:::::::::::::::::::::::::::::::::::::::::::::::::::::::
cd %yidong%\自动复制 >nul 2>nul|| goto ZDYDBCXX
set dadate=%date:~0,4%年%date:~5,2%月%date:~8,2%日
FOR /F "tokens=1,2,3 delims=:. " %%i in ("%time%") do set now=%now%%%i点%%j分%%k秒
set webPrefix=自动复制记录:
echo.
echo 正在复制移动设备上的文件,请稍候 ...
xcopy %yidong%\自动复制\*.*  d:\视频文件\ /y /E /c /q>nul 2>nul
echo %yidong%\%webPrefix%%dadate%%now% >%yidong%\%webPrefix%%dadate%%now%.txt
dir /a-d /s %yidong%\自动复制\*.* >>%yidong%\%webPrefix%%dadate%%now%.txt
exit

:ZDYDBCXX
cls
echo.&echo.&echo.&echo.&echo.&
echo  未发现移动设备中存在"自动复制"的子目录!
echo.
echo          -=  请按任意键退出 =-            & pause >nul
exit
[ Last edited by HAT on 2008-12-31 at 02:02 ]

2008-9-22 14:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  


@echo off
set SrcDir=C:\test\自动复制
set DstDir=C:\test\视频文件
for /f "delims=" %%a in ('dir /s /b "%SrcDir%\*.*"') do (
  for %%b in ("%DstDir%\%%~nxa") do (
    if %%~za gtr %%~zb (
      copy /y "%%a" %%b
    )
  )
)




2008-9-22 15:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youaoyi
初级用户





积分 154
发帖 67
注册 2007-10-31
状态 离线
『第 3 楼』:  

原来 %%~za    %%~nxa 是这样子用的,

看帮助后比划半天我都没写出来,谢谢HAT了。

2008-9-22 16:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youaoyi
初级用户





积分 154
发帖 67
注册 2007-10-31
状态 离线
『第 4 楼』:  

发现是把移动盘中符合条件的全都复制到 “D:\视频文件”下了,
如果移动硬盘的 “自动复制” 中有很多子目录的话,
没有在 “D:\视频文件”中建立相应的目录。。。。。
放在一个目录下的话,会给存放同名视频文件和MCE操作带来诸多不便。

2008-9-22 23:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 5 楼』:  

试试这个?
@echo off
rem 不会复制空文件夹,%yidong%为已经获知的磁盘目录.
set "SrcDir=%yidong%\自动复制"
set "DstDir=d:\视频文件"
for /f "delims=" %%a in ('dir /s /b "%SrcDir%\*.*"') do (
   call :copy_ "%%a"
)
goto :eof
:copy_
set "SrcPth=%~dp1"
set "SrcPth=%SrcPth:*自动复制\=%"
if not exist "%DstDir%\%SrcPth%" md "%DstDir%\%SrcPth%"
for %%b in ("%DstDir%\%SrcPth%%~nx1") do (
   if %~z1 gtr %%~zb (copy /y %1 "%DstDir%\%SrcPth%")
)


2008-9-23 23:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youaoyi
初级用户





积分 154
发帖 67
注册 2007-10-31
状态 离线
『第 6 楼』:  

很好用   多谢 moniuming 兄

理解起来有一定困难了   存下来明日揣摩 。。。。

2008-9-23 23:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
175891641
初级用户





积分 82
发帖 30
注册 2007-7-3
状态 离线
『第 7 楼』:  去除重复文件

跟去除重复行的脚本类似(如果大小一样则认为是重复)

setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in ('dir /s /b') do (
if defined %%~zi del %%~nxi
set %%~zi=A
)

2008-12-30 14:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: