中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何用批处理命令判断2个文件名是否相同?
作者:
标题: 如何用批处理命令判断2个文件名是否相同? 上一主题 | 下一主题
ChengXu
新手上路





积分 18
发帖 18
注册 2010-6-15
状态 离线
『楼 主』:  如何用批处理命令判断2个文件名是否相同?

C:\Target\1.txt
S:\Source\1.txt

如何用批处理命令判断这两个文件名一样?
当一样时,不做任何操作;
当不一样时,覆盖拷贝S:\Source\文件夹里的所有内容到C:\Target\文件夹里。

2010-6-15 11:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
keeds
新手上路





积分 11
发帖 8
注册 2010-6-10
状态 离线
『第 2 楼』:  

dir /a-d /b "源文件夹路径">temp.txt
for /f %%i in (temp.txt) do (IF NOT EXIST "目标文件夹路径\%%i" move "源文件夹路径\%%i" "目标文件夹路径")
del temp.txt

   此帖被 +1 点积分    点击查看详情   
评分人:【 ChengXu 分数: +1  时间:2010-6-18 14:55


2010-6-15 12:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ChengXu
新手上路





积分 18
发帖 18
注册 2010-6-15
状态 离线
『第 3 楼』:  

不太明白,尤其是第一行dir /a-d /b "源文件夹路径">temp.txt

还有for /f %%i in (temp.txt)

这两句什么意思?起了什么作用?

2010-6-15 12:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ChengXu
新手上路





积分 18
发帖 18
注册 2010-6-15
状态 离线
『第 4 楼』:  

我的目的是这样的,C:\Target和S:\Source这2个文件夹中的内容应该是一样的,如果S:\Source中的内容变了,就要将S:\Source中的全部文件拷贝去C:\Target中,所以我在C:\Target和S:\Source建了一个txt的文件用来标识版本(根据文件名),整个文件夹里只有这一个文件是txt格式的。
所以这个批处理要执行的内容就是以下内容:

1. 获取C:\Target中的txt文件的文件名
2. 判断在S:\Source中是否有存在和C:\Target中的txt文件同名的文件
3. 如果有同名的文件,则不做任何操作,如果没有同名的文件,覆盖拷贝S:\Source\文件夹里的所有内容到C:\Target\文件夹里

2010-6-15 12:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
keeds
新手上路





积分 11
发帖 8
注册 2010-6-10
状态 离线
『第 5 楼』:  

dir /a-d /b "C:\Target\">temp.txt

将C:\Target\里除了文件夹以外的文件名称导出到temp.txt里

for /f %%i in (temp.txt)

循环读取temp.txt里每一行(就是C:\Target\里面的文件名,比如1.txt,2.txt)

   此帖被 +1 点积分    点击查看详情   
评分人:【 ChengXu 分数: +1  时间:2010-6-18 15:01


2010-6-15 12:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
keeds
新手上路





积分 11
发帖 8
注册 2010-6-10
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by ChengXu at 2010-6-15 12:54:
我的目的是这样的,C:\Target和S:\Source这2个文件夹中的内容应该是一样的,如果S:\Source中的内容变了,就要将S:\Source中的全部文件拷贝去C:\Target中,所以 ...

for /f %%i in (C:\Target\1.txt) do (IF NOT EXIST "C:\Target\%%i" move "S:\Source\%%i" "C:\Target")

   此帖被 +1 点积分    点击查看详情   
评分人:【 ChengXu 分数: +1  时间:2010-6-21 09:22


2010-6-15 12:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 7 楼』:  

不需要弄一个1.txt:
xcopy S:\Source C:\Target /zfdi
1,如果要再包括子目录,最后写/zfdis
2,如果要再包括只读文件,最后写/zfdisr
3,如果要再包括隐藏或系统属性文件,最后写/zfdisrh
4,如果要再包括空目录,最后写/zfdisrhe
5,如果要再带着DACL权限,最后写/zfdisrheo
6,如果要再带着SACL权限,最后写/zfdisrhex

[ Last edited by Hanyeguxing on 2010-6-15 at 13:45 ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 ChengXu 分数: +1  时间:2010-6-21 09:22




批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-6-15 13:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ChengXu
新手上路





积分 18
发帖 18
注册 2010-6-15
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by keeds at 2010-6-15 12:59:


for /f %%i in (C:\Target\1.txt) do (IF NOT EXIST "C:\Target\%%i" move "S:\Source\%%i" "C:\Target")

还是不对啊,因为那个txt文本是我用来标记版本号的,所以它的名字每次都是不同的,如果batchfile里固定了名字,那我每次还要改batchfile。
有没有办法是可以先获得C:\Target\里面的txt的文件名(只有一个txt文件),
然后再判断是否有同名文件在S:\Source里,如果有,copy S:\Source 中的内容到 C:\Target\ 中

2010-6-15 16:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ChengXu
新手上路





积分 18
发帖 18
注册 2010-6-15
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by Hanyeguxing at 2010-6-15 13:42:
不需要弄一个1.txt:
xcopy S:\Source C:\Target /zfdi
1,如果要再包括子目录,最后写/zfdis
2,如果要再包括只读文件,最后写/zfdisr
3,如果要再包 ...

因为整个文件夹比较大,全部Copy需要较长时间,如果S:\Source没有变更(即S:\Source中的那个用来标记版本号的txt文件名与C:\Target中的那个txt文件名相同)就不进行Copy的动作,如果不同,才Copy。
有办法吗?

2010-6-15 16:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 10 楼』:  

/d参数本身就是比对是否发生修改的参数。只有当修改、不同时才自动复制需要的部分。
例如:
1,某些文件存在于源目录,而目标目录中不存在,则复制这些文件
2,某些文件同时存在于源目录和目标目录,则比较最后修改时间,只有源目标中的文件比目标目录中的文件更新时,才复制这些文件。

/u参数,以目标目录为样本,只复制目标目录中存在的文件。


当/d和/u一起使用时,就排除了只在源目录中的文件,而只比对两个目录同时存在的文件的最后修改时间:/du

[ Last edited by Hanyeguxing on 2010-6-15 at 17:00 ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 ChengXu 分数: +1  时间:2010-6-15 20:46




批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-6-15 16:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ChengXu
新手上路





积分 18
发帖 18
注册 2010-6-15
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by Hanyeguxing at 2010-6-15 16:51:
/d参数本身就是比对是否发生修改的参数。只有当修改、不同时才自动复制需要的部分。
例如:
1,某些文件存在于源目录,而目标目录中不存在,则 ...

原来是这样啊!
真是太神奇了!

我想请问下我在什么地方可以查到z、f、d、i等等这些参数的含义呢?
说实话我在百度上面搜的时候都不知道该搜什么关键字。

2010-6-15 17:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 12 楼』:  

在cmd中运行xcopy/?

   此帖被 +1 点积分    点击查看详情   
评分人:【 ChengXu 分数: +1  时间:2010-6-15 20:45




批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-6-15 19:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ChengXu
新手上路





积分 18
发帖 18
注册 2010-6-15
状态 离线
『第 13 楼』:  

直接在命令行中运行 XCOPY /?
谢谢楼上所有帮我解答问题的朋友
该问题解决了谢谢啊!

2010-6-15 20:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ChengXu
新手上路





积分 18
发帖 18
注册 2010-6-15
状态 离线
『第 14 楼』:  

晕!24小时只能评2点分数啊?!
不好意思!楼上还有没评分的朋友,我下次再来评!
谢谢大家!

2010-6-15 20:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: