中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教批处理:如何确认指定文件在硬盘上是否存在?
<<   [1] [2]  >>   >
作者:
标题: 请教批处理:如何确认指定文件在硬盘上是否存在? 上一主题 | 下一主题
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『楼 主』:  请教批处理:如何确认指定文件在硬盘上是否存在?

请教批处理:如何确认指定文件在硬盘上是否存在? 我想实现下面的任务,如何写批处理? 就是从C盘开始到O为止,检查根目录下是否存在aaa.txt这个文件,存在的话,就输出盘符给以变量,并执行其他任务,否则继续查找直到O盘结束。


2006-10-29 09:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

@echo off
for %%i in (c d e f g h i j k l m n o) do if exist %%i:\aaa.txt goto another
goto :eof

:another
command




尺有所短,寸有所长,学好CMD没商量。 考虑问题复杂化,解决问题简洁化。
2006-10-29 09:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yangzhiyi
中级用户





积分 261
发帖 123
注册 2006-6-6
状态 离线
『第 3 楼』:  

IF EXIST c:\aaa.txt set 变量=c: IF EXIST d:\aaa.txt set 变量=d: ... IF EXIST o:\aaa.txt set 变量=o: 其它任务 够直接吧,或 IF EXIST c:\aaa.txt set 变量=c: & goto end IF EXIST o:\aaa.txt set 变量=o: & goto end :end 其它任务 还是楼上的利害,我一直都不会用 for ,有人能发一个for 的详细说明吗 [ Last edited by yangzhiyi on 2006-10-29 at 09:36 AM ]


2006-10-29 09:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 4 楼』:  

谢谢版主,请问goto :eof 什么意思?另外我还需要知道这个文件在哪个盘,需要把%%i传给一个变量,好对这个文件进行操作。 为这个功能借了DOS书,上网也查了半天,还没会。


2006-10-29 09:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 5 楼』:  

[quote]Originally posted by yangzhiyi at 2006-10-29 09:34: IF EXIST c:\aaa.txt set 变量=c: IF EXIST d:\aaa.txt set 变量=d: ... IF EXIST o:\aaa.txt set 变量=o: ------------------ 这样我也想到了,就是太麻烦。呵呵。谢谢了。


2006-10-29 09:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 6 楼』:  

这样不行吧?一句里命令太多。 for %%q in (c d e f g h i j k l) do set abc=%%q if exit %abc%:\aaa.txt goto ok1


2006-10-29 09:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 7 楼』:  

  一般而言,goto :eof 的功能相当于exit,但是,如果用 call 来调用某个标签段的话,这个标签段中必须包含一个 goto :eof 而不能用 exit 来替换。   如果想知道这个文件在哪个盘上的话,把2F的代码稍微多写一点就可以了:
@echo off
for %%i in (c d e f g h i j k l m n o) do (
    if exist %%i:\aaa.txt set drive=%%i&goto another
)
goto :eof

:another
echo aaa.txt位于 %drive% 分区
command




尺有所短,寸有所长,学好CMD没商量。 考虑问题复杂化,解决问题简洁化。
2006-10-29 09:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 8 楼』:  

多谢了,明白了,用括号括起来的用法。


2006-10-29 09:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 9 楼』:  

怎么回事?运行出错,哪里我哪里写错了吗? --------- 1.bat rem @echo off REM 判断_c.bat位置 for %%i in (c d e f) do (if exist %%i:\_c.bat set drv_c=%%i goto ok1) _cn.bat goto :eof :ok1 rem 找到文件所在盘符。 -------------------------------------------------- 运行后显示 D:\>(if exist c:\_c.bat set drv_c=c goto ok1) Bad command or file name


2006-10-29 11:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 10 楼』:  

这样也不行。 rem @echo off REM 判断_c.bat位置 for %%i in (c d e f) do ( if exist %%i:\_c.bat set drv_c=%%i goto ok1 ) _cn.bat goto :eof :ok1 rem 找到文件所在盘符。


2006-10-29 11:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 11 楼』:  

set drv_c=%%i 和 goto ok1 之间还有一个连接符 &




尺有所短,寸有所长,学好CMD没商量。 考虑问题复杂化,解决问题简洁化。
2006-10-29 11:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 12 楼』:  

版主,下面两种都还是不行呀。是不是拷贝出来字符变掉了?实在不好意思,能不能以附件形式给我? ----------- rem @echo off for %%i in (c d e) do (if exist %%i:\aaa.txt set drive=%%i&goto another) goto :eof :another echo aaa.txt位于 %drive% -------------- rem @echo off for %%i in (c d e) do ( if exist %%i:\aaa.txt set drive=%%i&goto another ) goto :eof :another echo aaa.txt位于 %drive%


2006-10-29 20:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 13 楼』:  

  观察你修改后的代码,最后没有暂停语句pause,怀疑是因为找到了之后却不暂停就直接退出了,导致你误认为代码出错。   我已经把代码用[code]和[/code]括起来了,你点7F的 [Copy to clipboard] 就可以把代码分毫不差地复制下来,最后一个command你用pause来替换就可以了。在我的机子上测试通过,不知道你机子上是否存在一个根目录下的aaa.txt,请你再检查一次。 [[i] Last edited by namejm on 2006-10-30 at 01:03 AM [/i]]




尺有所短,寸有所长,学好CMD没商量。 考虑问题复杂化,解决问题简洁化。
2006-10-30 00:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 14 楼』:  

我再看看。我在测试时都把第一句前加了rem,在goto: eof上句加了pause。 ------------- 还是不行。为缩小循环,改成查找c-e。虚拟机截图如下: [ Last edited by lianjiang2004 on 2006-10-30 at 02:16 AM ]


附件 1: snap.jpg (2006-10-30 02:16, 21.32 K, 下载附件所需积分 1 点 ,下载次数: 3)


附件 2: snap1.jpg (2006-10-30 02:16, 22.8 K, 下载附件所需积分 1 点 ,下载次数: 3)


附件 3: snap2.jpg (2006-10-30 02:16, 21.16 K, 下载附件所需积分 1 点 ,下载次数: 3)


2006-10-30 01:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 15 楼』:  

  楼上的是用虚拟机测试的?   是不是用的DOS系统测试的啊?DOS里面的批处理好象不支持"("和")"的使用,建议改成"goto [标签]"的形式...


2006-10-30 04:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
<<   [1] [2]  >>   >
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: