![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 18:31 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 请教批处理:如何确认指定文件在硬盘上是否存在? |
| 可打印版本 5,575 / 26 |
| 第1楼 lianjiang2004 | 发表于 2006-10-29 09:06 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
请教批处理:如何确认指定文件在硬盘上是否存在? 请教批处理:如何确认指定文件在硬盘上是否存在?
我想实现下面的任务,如何写批处理? 就是从C盘开始到O为止,检查根目录下是否存在aaa.txt这个文件,存在的话,就输出盘符给以变量,并执行其他任务,否则继续查找直到O盘结束。 |
|
| 第2楼 namejm | 发表于 2006-10-29 09:31 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
| 第3楼 yangzhiyi | 发表于 2006-10-29 09:34 |
| 中级用户 发帖 123 积分 261 | |
|
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 ] |
|
| 第4楼 lianjiang2004 | 发表于 2006-10-29 09:38 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
谢谢版主,请问goto :eof 什么意思?另外我还需要知道这个文件在哪个盘,需要把%%i传给一个变量,好对这个文件进行操作。
为这个功能借了DOS书,上网也查了半天,还没会。 |
|
| 第5楼 lianjiang2004 | 发表于 2006-10-29 09:40 |
| 金牌会员 发帖 1,884 积分 3,946 | |
Originally posted by yangzhiyi at 2006-10-29 09:34: |
|
| 第6楼 lianjiang2004 | 发表于 2006-10-29 09:46 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
这样不行吧?一句里命令太多。
for %%q in (c d e f g h i j k l) do set abc=%%q if exit %abc%:\aaa.txt goto ok1 |
|
| 第7楼 namejm | 发表于 2006-10-29 09:48 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
一般而言,goto :eof 的功能相当于exit,但是,如果用 call 来调用某个标签段的话,这个标签段中必须包含一个 goto :eof 而不能用 exit 来替换。
如果想知道这个文件在哪个盘上的话,把2F的代码稍微多写一点就可以了: |
|
| 第8楼 lianjiang2004 | 发表于 2006-10-29 09:58 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
多谢了,明白了,用括号括起来的用法。
|
|
| 第9楼 lianjiang2004 | 发表于 2006-10-29 11:01 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
怎么回事?运行出错,哪里我哪里写错了吗?
--------- 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 |
|
| 第10楼 lianjiang2004 | 发表于 2006-10-29 11:04 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
这样也不行。
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 找到文件所在盘符。 |
|
| 第11楼 namejm | 发表于 2006-10-29 11:10 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
set drv_c=%%i 和 goto ok1 之间还有一个连接符 &
|
|
| 第12楼 lianjiang2004 | 发表于 2006-10-29 20:57 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
版主,下面两种都还是不行呀。是不是拷贝出来字符变掉了?实在不好意思,能不能以附件形式给我?
----------- 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% |
|
| 第13楼 namejm | 发表于 2006-10-30 00:25 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
观察你修改后的代码,最后没有暂停语句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]] |
|
| 第14楼 lianjiang2004 | 发表于 2006-10-30 01:27 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
我再看看。我在测试时都把第一句前加了rem,在goto: eof上句加了pause。
------------- 还是不行。为缩小循环,改成查找c-e。虚拟机截图如下: [ Last edited by lianjiang2004 on 2006-10-30 at 02:16 AM ] 附件 snap.jpg (21.32 KiB) snap1.jpg (22.8 KiB) snap2.jpg (21.16 KiB) |
|
| 第15楼 lxmxn | 发表于 2006-10-30 04:18 |
| 版主 发帖 4,938 积分 11,386 | |
|
楼上的是用虚拟机测试的? 是不是用的DOS系统测试的啊?DOS里面的批处理好象不支持"("和")"的使用,建议改成"goto "的形式... |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |