Board logo

标题: 对比文件 [打印本页]

作者: ufw119     时间: 2006-12-26 10:07    标题: 对比文件

用DOS。。怎么对比文件的大小或者修改日期不同呢?
作者: namejm     时间: 2006-12-26 10:24
  纯DOS还是windows下的CMD?
作者: ufw119     时间: 2006-12-26 10:25
现在要找纯的DOS难呀。

我现在说的是在WINDWOS下的CMD。
作者: namejm     时间: 2006-12-26 10:30
  XP下的CMD可以用 for 语句中的 %%~zi 和 %%~ti 来分别获取文件的字节数和最后修改日期,用 dir /a-d 也可以提取到,dir 里的 /t 参数甚至可以提取到文件的创建时间、上次访问时间和上次修改时间。
作者: ufw119     时间: 2006-12-26 11:13


  Quote:
Originally posted by namejm at 2006-12-25 09:30 PM:
  XP下的CMD可以用 for 语句中的 %%~zi 和 %%~ti 来分别获取文件的字节数和最后修改日期,用 dir /a-d 也可以提取到,dir 里的 /t 参数甚至可以提取到文� ...

多谢版主。。
我现有一个实验环境:
服务器有一文件VER.txt..工作站某地目录下有一文件VER.TXT.如果服务器上的VER文件改变,就执行游戏更新,否则就直接运行游戏。。

求完整的代码。。
作者: namejm     时间: 2006-12-26 11:21
  因为没条件,联网状态下的批处理我从来没写过,不敢信口开河,还是请有经验的来写一下吧。
作者: ufw119     时间: 2006-12-27 02:21
问题没有解决..........顶起。。。。

怎么实现。。对比服务器(\\a254\d$\mir2\ver.txt)和工作站的(d:\netgame\mir2\ver.txt)两个文件,,如果修改日期或大小不同,就执行一段命令,如果相同就执行另外一条命令。。。。。



CMD能实现吗?VBS的又如何写呢。
作者: lxmxn     时间: 2006-12-27 02:53

@echo off
set k=d:\netgame\mir2\ver.txt
net use z: \\a254\d$\mir2\
for /f %%i in (z:\ver.txt) do set s_t=%%~ti&set s_s=%%~zi
for /f %%i in (%k%) do set c_t=%%~ti&set c_s=%%~zi
if %s_t%==%c_t% if %s_s%==%c_s% (
rem 都相同时的命令……
rem command……
)
rem 有一个不相同要执行的命令……
pause
  没测试,有问题跟贴讨论。

作者: ufw119     时间: 2006-12-27 03:59
@echo off
cd\
cd windows
cd system32
set k=e:\sc47\ver.txt
net use z: \\a254\d\sc47
for /f %%i in (z:\ver.txt) do set s_t=%%~ti&set s_s=%%~zi
for /f %%i in (%k%) do set c_t=%%~ti&set c_s=%%~zi
if %s_t%==%c_t% if %s_s%==%c_s% (
echo 都相同时的命令…… >c:\1.txt
)
echo 有一个不相同要执行的命令…… >c:\2.txt
pause



执行后,可以映射网络硬盘,但没有在C盘下生成文件。。
作者: lxmxn     时间: 2006-12-27 04:06

  cd\,cd windows,cd system32 可以用一个来完成cd /d c:\windows\system32。

  一个文件都没有生成么?

作者: zh159     时间: 2006-12-27 05:23
else 嵌套问题
只要“if %s_t%==%c_t% ”不等,后面的都不执行

改一下:
if %s_t%==%c_t% if %s_s%==%c_s% echo 都相同时的命令…… >c:\1.txt&&goto :end
echo 有一个不相同要执行的命令…… >c:\2.txt
:end
pause

[ Last edited by zh159 on 2006-12-26 at 04:25 PM ]
作者: zjindong     时间: 2007-1-14 03:33
测试无效。。
我很想知道这个答案,请高手继续
作者: tianzizhi     时间: 2007-1-14 07:04
lxmxn犯了一个低级的错误,
for /f %%i in (z:\ver.txt) do set s_t=%%~ti&set s_s=%%~zi
for /f %%i in (%k%) do set c_t=%%~ti&set c_s=%%~zi
这两句根本得不到变量值,后面的就不要谈了.
应该把/f这个参数去掉才行,加上它就处理文本内容,我们要处理文件本身属性,不是文本内容.
还有处理时间时还要把变量加上"",因为它中间有空格.

@echo off
cd /d c:\windows\system32
set k=e:\sc47\ver.txt
net use z: \\a254\d\sc47
for  %%i in (z:\ver.txt) do set s_t=%%~ti & set s_s=%%~zi
for  %%j in (%k%) do set c_t=%%~tj & set c_s=%%~zj
if "%s_t%"=="%c_t%" if %s_s%==%c_s% (echo 都相同时的命令.......>c:\1.txt & goto end)
echo 有一个不相同要执行的命令…… >c:\2.txt
:end
pause
作者: lxmxn     时间: 2007-1-14 07:59

  呵呵,用/f参数习惯了,没改过来,多谢指出我的疏忽。

作者: zjindong     时间: 2007-1-15 14:05
请问为什么要打开此目录 cd /d c:\windows\system32

测试还是无效.请高手测试一下!

[ Last edited by zjindong on 2007-1-15 at 02:09 PM ]