请问批处理怎么选择性的拷贝

fastyou 2005-11-11 09:35:43
我现在想实现的功能是。我想把这个目录下E:\Rational\K3Test的文件拷贝到D:\Rational这个目录,但是有个条件,目录E:\Rational\K3Test\DataBase下有个DataBase文件夹,但不想把DataBase这个文件夹下的内容拷贝过去,请问怎么写可以过滤,实现这个功能。

我凭感觉写了下面代码,但是不能执行,请问高手怎么解决,或者你有更好的方法。

@echo off
@if "%1" == "" goto Msage
@for /D "DataBase" %1 in ("E:\Rational\K3Test\*.*") DO xcopy E:\Rational\K3Test D:\Rational
@goto end
:Msage
@echo sorry can't find patch
:end

pause
...全文
151 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
spark_li 2005-11-24
  • 打赏
  • 举报
回复
恩,看你的帖子,意思应该是要把E:\Rational\K3Test目录下的所有的文件和文件夹(除了
E:\Rational\K3Test\DataBase\DataBase 下的文件和文件夹)都复制到D:\Rational下,对吧?

ok,那么我给你实现的思路

dir /b E:\Rational\K3Test >>d:\filelist.txt
find /v "DataBase" d:\filelist.txt >>tmp.txt
for /F %i in (d:\tmp.txt) do @xcopy /e %i D:\Rational

解释:第一行是取文件与目录列表
第二行是排除DataBase目录
第三行循环读文件列表,复制

如果
E:\Rational\K3Test\DataBase目录除了DataBase子目录还有其他子目录或者文件的话,还需要用下面的把E:\Rational\K3Test\DataBase目录的其他文件复制过去
del d:\filelist.txt
del d:\tmp.txt

dir /b E:\Rational\K3Test\DataBase >>d:\filelist.txt
find /v "DataBase" d:\filelist.txt >>tmp.txt
mkdir d:\Rational\DataBase
for /F %i in (d:\tmp.txt) do @xcopy /e %i D:\Rational\DataBase

收工
mudonfield 2005-11-24
  • 打赏
  • 举报
回复
收拾现场!
kk2001 2005-11-12
  • 打赏
  • 举报
回复
1. IF EXIST E:\Rational\K3Test\DataBase (echo OFF)
不知道这个行不行的通,自行验证一下吧
2. 利用文件属性去xcopy,下面是利用隐藏属性做手脚,也可以利用只读,存档等去操作的
attrib E:\Tencent\QQ +h
xcopy E:\Tencent\*.* E:\test /e /f /y
attrib E:\Tencent\QQ -h
fastyou 2005-11-11
  • 打赏
  • 举报
回复
这个建议不是很好,就是因为DataBase文件家里的文件大打了有6G,我再通过网络批处理运行时太慢了(这个支持多用户的),所以想在拷贝的时候可以过滤。谢谢,还有好办法没?
Aceryt 2005-11-11
  • 打赏
  • 举报
回复
简单的反向思路是,用Xcopy命令全部复制过去,然后再选择性地删除目标位置的Database目录。
xp下用netsh禁用启用网卡 在XP系统中不支持netsh interface set interface name命令扩展,所以此命令是无法正常运行的,提取2003下的ifmon.dll文件覆盖,就可以用了。 winxp下使用: netsh interface set interface "本地连接" "disabled" 会出现 如下错误提示: 代码: C:\>netsh interface set interface "本地连接" "disabled" 没有指定一个或多个关键性参数 此命令提供的语法不正确。请查看帮助以获取正确的语法信息。 用法 set interface [name = ] IfName [ [admin = ] ENABLED|DISABLED [connect = ] CONNECTED|DISCONNECTED [newname = ] NewName ] 设置接口参数。 IfName - 接口名称 admin - 接口是否被启用 (仅用于非 LAN)。 connect - 是否连接接口 (仅用于非 LAN)。 newname - 接口的新名称 (仅用于非 LAN)。 注意: - 除名称外,还必须至少指定一个选项。 - 如果 connect = CONNECTED 被指定,那么接口被自动 启用,甚至在 admin = DISABLED 选项被指定时也是如 此。 =========================== 替换XP下的ifmon.dll步骤: 但是你可以把win2003系统下 C:\\WINDOWS\\system32\\ifmon.dll文件 拷贝到winxp系统下来使用,从而实现网卡的禁用,启用拷贝时候需要注意:需要先把 ifmon.dll文件拷贝到 C:\\WINDOWS\\system32\\dllcache 替换掉系统文件再拷贝到 C:\\WINDOWS\\system32 替换掉系统文件,若系统会提示 文件被修改了,是否从安装盘还原,选择保持修改的文件就替换成功了。 替换后就可以正常使用netsh命令来禁用,启用网卡了 =========================== 根目录附件中上有win2003的ifmon.dll文件备份 DOS下重启网卡 @ rem 关闭网卡: netsh interface set interface name="本地连接" admin=DISABLED @ rem 开启网卡: netsh interface set interface name="本地连接" admin=ENABLED 使用PPPOE协议进行宽带拨号时,若要重新拨号,不要对使用PPPOE的“宽带连接”netsh,而应该对“本地连接”netsh WN7可直接用批处理 如果还不会下载我的附件吧0分。内含有XP用win2003的ifmon.dll文件备份及所用所有批处理文件。

6,849

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧