楼 主
请教批处理:如何确认指定文件在硬盘上是否存在?
发表于 2006-10-29 09:06 · 中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946 发帖 1,884 注册 2006-01-20 13:00 UID 49283 性别 男
状态 离线
请教批处理:如何确认指定文件在硬盘上是否存在?
我想实现下面的任务,如何写批处理? 就是从C盘开始到O为止,检查根目录下是否存在aaa.txt这个文件,存在的话,就输出盘符给以变量,并执行其他任务,否则继续查找直到O盘结束。
第 2 楼
发表于 2006-10-29 09:31 · 中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226 发帖 1,737 注册 2006-03-10 00:38 UID 51697 来自 成都
状态 离线
@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没商量。
考虑问题复杂化,解决问题简洁化。
第 3 楼
发表于 2006-10-29 09:34 · 中国 广东 茂名 电信
中级用户
★★
积分 261 发帖 123 注册 2006-06-06 19:23 UID 56648
状态 离线
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 楼
发表于 2006-10-29 09:38 · 中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946 发帖 1,884 注册 2006-01-20 13:00 UID 49283 性别 男
状态 离线
谢谢版主,请问goto :eof 什么意思?另外我还需要知道这个文件在哪个盘,需要把%%i传给一个变量,好对这个文件进行操作。
为这个功能借了DOS书,上网也查了半天,还没会。
第 5 楼
发表于 2006-10-29 09:40 · 中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946 发帖 1,884 注册 2006-01-20 13:00 UID 49283 性别 男
状态 离线
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:
------------------
这样我也想到了,就是太麻烦。呵呵。谢谢了。
第 6 楼
发表于 2006-10-29 09:46 · 中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946 发帖 1,884 注册 2006-01-20 13:00 UID 49283 性别 男
状态 离线
这样不行吧?一句里命令太多。
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 楼
发表于 2006-10-29 09:48 · 中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226 发帖 1,737 注册 2006-03-10 00:38 UID 51697 来自 成都
状态 离线
一般而言,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没商量。
考虑问题复杂化,解决问题简洁化。
第 8 楼
发表于 2006-10-29 09:58 · 中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946 发帖 1,884 注册 2006-01-20 13:00 UID 49283 性别 男
状态 离线
第 9 楼
发表于 2006-10-29 11:01 · 中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946 发帖 1,884 注册 2006-01-20 13:00 UID 49283 性别 男
状态 离线
怎么回事?运行出错,哪里我哪里写错了吗?
---------
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 楼
发表于 2006-10-29 11:04 · 中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946 发帖 1,884 注册 2006-01-20 13:00 UID 49283 性别 男
状态 离线
这样也不行。
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 楼
发表于 2006-10-29 11:10 · 中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226 发帖 1,737 注册 2006-03-10 00:38 UID 51697 来自 成都
状态 离线
set drv_c=%%i 和 goto ok1 之间还有一个连接符 &
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
第 12 楼
发表于 2006-10-29 20:57 · 中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946 发帖 1,884 注册 2006-01-20 13:00 UID 49283 性别 男
状态 离线
版主,下面两种都还是不行呀。是不是拷贝出来字符变掉了?实在不好意思,能不能以附件形式给我?
-----------
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 楼
发表于 2006-10-30 00:25 · 中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226 发帖 1,737 注册 2006-03-10 00:38 UID 51697 来自 成都
状态 离线
观察你修改后的代码,最后没有暂停语句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没商量。
考虑问题复杂化,解决问题简洁化。
第 14 楼
发表于 2006-10-30 01:27 · 中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946 发帖 1,884 注册 2006-01-20 13:00 UID 49283 性别 男
状态 离线
我再看看。我在测试时都把第一句前加了rem,在goto: eof上句加了pause。
-------------
还是不行。为缩小循环,改成查找c-e。虚拟机截图如下:
[ Last edited by lianjiang2004 on 2006-10-30 at 02:16 AM ]
第 15 楼
发表于 2006-10-30 04:18 · 中国 湖北 武汉 电信
版主
★★★★★
积分 11,386 发帖 4,938 注册 2006-07-23 17:10 UID 59080
状态 离线
楼上的是用虚拟机测试的?
是不是用的DOS系统测试的啊?DOS里面的批处理好象不支持"("和")"的使用,建议改成"goto "的形式...
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正