[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理怎样根据两文件的版本高低或大小来决定要不要复制并覆盖原文件?

本帖最后由 solan 于 2015-5-21 18:49 编辑

我的原意是这样的,如果不存在%AllUsersProfile%\A目录,就把%cd%\A整个文件夹和文件复制到%AllUsersProfile%,
如果存在,那么这个时候如果%AllUsersProfile%\A中没有1.exe文件,就彻底删除文件夹A,再把%cd%\A整个文件夹和文件复制到%AllUsersProfile%,
                      如果%AllUsersProfile%\A中存在1.exe文件,那么把它跟%cd%\A中的1.exe进行版本高低的比较:如果前者的版本低或同版本,就执行上面的复制;如果前者的版本高就不复制。
     但是,我不会提取文件版本,只好比大小了,批处理如下:
  1. if not exist "%AllUsersProfile%\A" (goto 11) else (if not exist "%AllUsersProfile%\A\1.exe" goto 22)
  2. for %%1 in (%AllUsersProfile%\A\1.exe) do set wind=%%~z1
  3. for %%1 in (%cd%\A\1.exe) do set snow=%%~z1
  4. if "%wind% equ %snow%" goto 22
  5. if "%wind% lss %snow%" goto 22
  6. :11
  7. xcopy /s/e/q/r/y "%cd%\A" "%AllUsersProfile%\A\"
  8. :22
  9. rmdir /s/q "%AllUsersProfile%\A"
  10. xcopy /s/e/q/r/y "%cd%\A" "%AllUsersProfile%\A\"
  11. pause
复制代码
但是这个代码不行,如果不存在%AllUsersProfile%\A目录倒能正常执行,一旦存在A\不管谁大小批处理立马闪退。后来我这样写,还是不行:
  1. md "%AllUsersProfile%\A\"
  2. if not exist "%AllUsersProfile%\A\1.exe" (goto 22) else (
  3. for %%1 in (%AllUsersProfile%\A\1.exe) do set wind=%%~z1
  4. for %%1 in (%cd%\A\1.exe) do set snow=%%~z1
  5. if "%wind% equ %snow%" goto 22
  6. if "%wind% lss %snow%" goto 22
  7. if "%wind% gtr %snow%" goto end
  8. :22
  9. rmdir /s/q "%AllUsersProfile%\A" >nul 2>nul
  10. xcopy /s/e/q/r/y "%cd%\A" "%AllUsersProfile%\A\" >nul 2>nul
  11. :end
  12. cls)
  13. pause
复制代码
在此恳请哪位老大帮忙改下代码,最好是通过两文件的版本高低比较来写代码,xp和win7通用,先谢过了!!

试试 replace

TOP

  1. @echo off
  2. set "dstFile=%AllUsersProfile%\A\1.exe"
  3. set "srcFile=%~dp0A\1.exe"
  4. >$ echo fso = new ActiveXObject("Scripting.FileSystemObject")
  5. >>$ echo v1 = fso.GetFileVersion("%dstFile:\=/%")
  6. >>$ echo v1 = v1.replace(/\d+/g,function(s0){return s0-0+100000000})
  7. >>$ echo v2 = fso.GetFileVersion("%srcFile:\=/%")
  8. >>$ echo v2 = v2.replace(/\d+/g,function(s0){return s0-0+100000000})
  9. >>$ echo WScript.Echo(v1 + " " + v2)
  10. if exist "%AllUsersProfile%\A\" (
  11.         if exist "%dstFile%" (
  12.                 for /f "tokens=1,2" %%1 in ('cscript -nologo -e:jscript $') do (
  13.                         if "%%1" LEQ "%%2" call :copy
  14.                 )
  15.         ) else (
  16.                 rd /s /q "%AllUsersProfile%\A\"
  17.                 call :copy
  18.         )
  19. ) else call :copy
  20. del $
  21. pause & exit/b
  22. :copy
  23. xcopy /s /e /q /r /y "%~dp0A\*" "%AllUsersProfile%\A\"
复制代码
1

评分人数

    • solan: 乐于助人技术 + 1

TOP

  1. @echo off
  2. if exist "%AllUsersProfile%\A\" (
  3.    if not exist "%AllUsersProfile%\A\1.exe" (
  4.       rd /s /q "%AllUsersProfile%\A\"
  5.       xcopy /e/q/r/y  "%cd%\A\" "%AllUsersProfile%\A\"
  6.    ) else  replace /u "%cd%\A\1.exe" "%AllUsersProfile%\A\"
  7. ) else xcopy /e/q/r/y "%cd%\A" "%AllUsersProfile%\A\"
  8. pause
复制代码

TOP

回复 5# solan


    为什么要把第7行和第9行改成replnx_flexce?

TOP

哦,替换错了,我在试试,谢谢

TOP

本帖最后由 solan 于 2015-5-21 16:20 编辑

大哥,你太有才了,提取版本的写法是很难的哦,你能写出来太厉害了,辛苦你再完善一下

TOP

"清除不干净" 是个什么意思?xcopy复制文件时只能覆盖,不能清除

TOP

可以结贴了,谢谢各位!!!

TOP

返回列表