中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 16:27
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何查验文件大小以确定是否复制
楼 主 [已结]如何查验文件大小以确定是否复制 发表于 2008-09-22 14:55 ·  中国 山东 济宁 联通
初级用户
★★
积分 154
发帖 67
注册 2007-10-31 13:18
UID 101283
性别 男
状态 离线
目的:在一个没有键盘鼠标的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 ]
2 发表于 2008-09-22 15:28 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
@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
)
)
)
3 发表于 2008-09-22 16:15 ·  中国 山东 济宁 联通
初级用户
★★
积分 154
发帖 67
注册 2007-10-31 13:18
UID 101283
性别 男
状态 离线
原来 %%~za %%~nxa 是这样子用的,

看帮助后比划半天我都没写出来,谢谢HAT了。
4 发表于 2008-09-22 23:47 ·  中国 山东 济宁 联通
初级用户
★★
积分 154
发帖 67
注册 2007-10-31 13:18
UID 101283
性别 男
状态 离线
发现是把移动盘中符合条件的全都复制到 “D:\视频文件”下了,
如果移动硬盘的 “自动复制” 中有很多子目录的话,
没有在 “D:\视频文件”中建立相应的目录。。。。。
放在一个目录下的话,会给存放同名视频文件和MCE操作带来诸多不便。
5 发表于 2008-09-23 23:02 ·  中国 广西 百色 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
UID 103929
性别 男
来自 广西
状态 离线
试试这个?
@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%")
)
6 发表于 2008-09-23 23:35 ·  中国 山东 联通
初级用户
★★
积分 154
发帖 67
注册 2007-10-31 13:18
UID 101283
性别 男
状态 离线
很好用 多谢 moniuming 兄

理解起来有一定困难了 存下来明日揣摩 。。。。
7 去除重复文件 发表于 2008-12-30 14:52 ·  中国 浙江 宁波 电信
初级用户
积分 82
发帖 30
注册 2007-07-03 13:55
UID 93029
性别 男
状态 离线
跟去除重复行的脚本类似(如果大小一样则认为是重复)

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