找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28573|回复: 8

[文件操作] 如何在dos中比较局域网目录中的两个文件大小和覆盖呢?

[复制链接]
发表于 2011-7-3 23:16:55 | 显示全部楼层 |阅读模式
本帖最后由 justosayhi 于 2011-7-3 23:18 编辑

已查到下面的代码能把本机电脑某个文件的大小和预设参数作比较,然后把小于参数的文件进行复制或移动。
@echo off&setlocal enabledelayedexpansion
title %date% %time:~,8% By escortmnm
cd d:\abc\test
for /f "tokens=*" %%i in ('dir /b data.dat) do (
if %%~zi leq 665600 move /y "%%~dpnxi" "bad.bak")
pause

但我想实现下面的功能:

首先进入局域网的\\abc\test目录,然后比较a.dat文件和b.dat文件,如果a.dat比b.dat小10kb的话就自动把b.dat覆盖a.dat.,这个bat文件能在任意一台局域网的电脑运行,请问应该如何编写这个bat文件呢?

评分

参与人数 1PB -2 收起 理由
zm900612 -2 请把超过一行的代码用code括起来

查看全部评分

发表于 2011-7-3 23:24:28 | 显示全部楼层
现在还有人用dos?
 楼主| 发表于 2011-7-3 23:42:08 | 显示全部楼层
编程上需要用,其实DOS功能还是很实用的。
发表于 2011-7-4 11:18:35 | 显示全部楼层

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. For %%I IN (局域网的\\abc\test\b.dat) Do (
  3.   For %%J IN (d:\abc\test\a.dat) Do (
  4.     Set /A Num=%%~zI-%%~zJ
  5.     If !Num! GEQ 10240 Copy /Y "%%I" "%%J"
  6.   )
  7. )
复制代码
 楼主| 发表于 2011-7-4 13:43:51 | 显示全部楼层
可以啦,实在太感谢楼上了!!!
发表于 2011-7-4 19:22:35 | 显示全部楼层
3# justosayhi


DOS是一个操作系统,你用的那个是Windows里面的CMD
 楼主| 发表于 2011-7-4 23:55:36 | 显示全部楼层
@Echo Off&SetLocal EnableDelayedExpansion
For %%I IN (局域网的\\abc\test\b.dat) Do (
  For %%J IN (d:\abc\test\a.dat) Do (
    Set /A Num=%%~zI-%%~zJ
    If !Num! GEQ 10240 Copy /Y "%%I" "%%J"
...
ArdentMan 发表于 2011-7-4 11:18


发生一个很奇怪的问题,直接运行这个批处理完全正常,但装入程序里运行这个批处理时却说操作失败,找不到参数这样。

经测试应该是 Set /A Num=%%~zI-%%~zJ这个代码有问题,可能是程序运行批处理时找不到set的参数,还望帮忙再看看。
 楼主| 发表于 2011-7-5 18:27:01 | 显示全部楼层
大哥还在吗? 能帮忙再看看吗?
发表于 2011-7-5 18:49:19 | 显示全部楼层
7# justosayhi


估计是文件完整路径中含空格或者其他分隔符吧,把可能含有空格的文件路径用 " 框起来试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 15:33 , Processed in 0.018882 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表