![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-13 22:25 |
共 47,812 主题排行 / 349,916 发帖 / 今日 0 篇 / 48,268 会员排行 |
| 论坛回收站 » 继续再来一个for的问题(更改了,主要问题在3楼) |
| 可打印版本 2,047 / 14 |
| 第1楼 wwx0423 | 发表于 2009-06-24 04:37 |
| 初级用户 发帖 30 积分 33 | |
|
继续再来一个for的问题(更改了,主要问题在3楼) 我有一个文本, 里面全是计算机名,一行一个计算机名
能否使用 for 来 一次提取一个计算机 然后将这个计算机映射到本地磁盘? 比如。。。 pcname.txt 的内容是 pcname1 pcname2 pcname3 现在我想做网络映射, \\pcname1\c$\windows\system32\ 完成 映射后需要判断它是否映射成功, 如果成功就继续执行 其他指令, 如果不成功就将该计算机记录到 另一个 故障.txt 的文本中。 主要问题在 3楼 [ Last edited by wwx0423 on 2009-6-24 at 06:25 ] |
|
| 第2楼 chenall | 发表于 2009-06-24 04:42 |
| 银牌会员 发帖 469 积分 1,276 来自 福建泉州 | |
|
自己学习一下FOR的用法
在CMD下 for /? 例子 for /f %%i in (pcname.txt) do ( net use \\%%i\c$\windows\system32\ || echo %%i>>故障.txt ) || 的作用就是当前面的语句执行失败时就执行后面的语句. && 反之 & 不论如何都执行. 这些都可以在CMD的帮助中学到. [ Last edited by chenall on 2009-6-24 at 04:44 ] |
|
| 第3楼 wwx0423 | 发表于 2009-06-24 04:59 |
| 初级用户 发帖 30 积分 33 | |
|
do 之后如果有指令集是不是 () 括起来。 我使用过 /?查看,但是帮助写的不是很详细。 看的不太懂。
我想要实现的功能是, 从 一个文本里 读取 计算机名,然后做映射, 如果映射不成功就把该计算机名记录下来。如果映射成功 则 判断该 计算机的 hots文件大小,如果大小不等于我要的大小,也把该计算机名记录下来,如果hots文件的大小等于我要的大小则不记录.断开映射, 继续重新读取下一个计算机名。 之前你有教过我怎么去hots的文件大小。 但是 现在 映射的成功和失败判定? 和 让for读一个计算机名后执行完需要的命令后再去读第二个计算机名, 好像for /f 他是全部读取完 再执行吧? [ Last edited by wwx0423 on 2009-6-24 at 06:25 ] |
|
| 第4楼 wwx0423 | 发表于 2009-06-24 05:00 |
| 初级用户 发帖 30 积分 33 | |
|
用 if 和 for 一起使用 最好了。
但是if 和for 的使用 和变量 都不会 ,刚刚才从你那得知 %i和 %%i 在cmd和批处理中的区别。 |
|
| 第5楼 wwx0423 | 发表于 2009-06-24 05:13 |
| 初级用户 发帖 30 积分 33 | |
|
chenall 在吗? 你能上一下QQ吗?
|
|
| 第6楼 Hanyeguxing | 发表于 2009-06-24 05:29 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
如果你很想用if ,可以使用语法if [not] errorlevel number command [else expression]
|
|
| 第7楼 wwx0423 | 发表于 2009-06-24 06:06 |
| 初级用户 发帖 30 积分 33 | |
|
不用 if 能做到 我想要实现的功能吗?
当当只用for 能实现? 好几个判断的地方。 判断 是否映射成功, 判断文件大小是否等于我要的值。 |
|
| 第8楼 Hanyeguxing | 发表于 2009-06-24 06:22 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
你在1楼有说要判断文件大小吗?自己看帮助吧
|
|
| 第9楼 wwx0423 | 发表于 2009-06-24 06:23 |
| 初级用户 发帖 30 积分 33 | |
|
主要的问题在3楼呀。
|
|
| 第10楼 chenall | 发表于 2009-06-24 07:15 |
| 银牌会员 发帖 469 积分 1,276 来自 福建泉州 | |
|
不知是不是没有注意看贴,我上面已经有例子了.
net use \xxx\xx || 失败执行. net use \xxx\xx && 成功时执行. for 虽然是全部读取,但也是一行一行来执行的. 可以考虑不在for 里面来完成所有功能.而把需要做的事放在一个模块里面. 首先获取HOSTS文件的大小 for %%i in (c:\windows\system32\drivers\etc\hosts) set hosts=%%~zi for /f %%i in (pcname.txt) do call :检测 %%i goto :eof :检测 if "%~1"=="" goto :eof net use \\%~1\c$\windows\system32\ || (echo %~1>>故障.txt&&goto :eof) for %%i in (\\%~1\c$\windows\system32\drivers\etc\hosts) do ( if not "%%~zi"=="%hosts%" echo %~1>>失败.txt ) goto :eof |
|
| 第11楼 wwx0423 | 发表于 2009-06-24 07:23 |
| 初级用户 发帖 30 积分 33 | |
|
看不懂你写的。
for %%i in (c:\windows\system32\drivers\etc\hosts) set hosts=%%~zi for /f %%i in (pcname.txt) do call :检测 %%i goto :eof :检测 if "%~1"=="" goto :eof net use \\%~1\c$\windows\system32\ || (echo %~1>>故障.txt&&goto :eof) for %%i in (\\%~1\c$\windows\system32\drivers\etc\hosts) do ( if not "%%~zi"=="%hosts%" echo %~1>>失败.txt ) goto :eof 其中 %~1 那里来的? 还与我要检测是的 映射的计算机的HOTS,如列表里有计算机名分别是 pc1 pc2 pc3 那么我要检测的是 pc1的 hots 和pc2的hots……没先映射怎么检测呀? [ Last edited by wwx0423 on 2009-6-24 at 07:24 ] |
|
| 第12楼 Hanyeguxing | 发表于 2009-06-24 07:32 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
for %%i in (c:\windows\system32\drivers\etc\hosts) set hosts=%%~zi
::扩展本地计算机的host 文件大小并作为比照基础 for /f %%i in (pcname.txt) do call :检测 %%i ::解析pcname.txt并call标签,同时将变量%%i带入到子标签 goto :eof :检测 if "%~1"=="" goto :eof ::判断变量%%i(从上面call带进来的那个,也就是第一个,%~1是用来扩展去掉引号的)是否为空 net use \\%~1\c$\windows\system32\ || (echo %~1>>故障.txt&&goto :eof) ::尝试建立连接,如果失败则输出%%i for %%i in (\\%~1\c$\windows\system32\drivers\etc\hosts) do ( if not "%%~zi"=="%hosts%" echo %~1>>失败.txt ) ::扩展远程host的大小,并与本地计算机的host大小比较 goto :eof %~1的问题参考批处理变量的扩展及命令call的使用 [ Last edited by Hanyeguxing on 2009-6-24 at 07:37 ] |
|
| 第13楼 chenall | 发表于 2009-06-24 07:36 |
| 银牌会员 发帖 469 积分 1,276 来自 福建泉州 | |
|
多谢楼上的解释,
楼主如果真想学好批处理. 应该好好看一下CMD命令的帮助,善用 /? 里面一般都有例子.试一次可能看不出来有什么作用,那就多试几次. 我从DOS的命令开始学起的,当时网络还不是很发达,都是一条命令/?然后一个一个参数加上去尝试的. 现在网络很方便.而且CMD的帮助都是中文的,应该学起来也比较快. |
|
| 第14楼 wwx0423 | 发表于 2009-06-24 07:57 |
| 初级用户 发帖 30 积分 33 | |
|
非常感谢。 我发现 直接 for %%i in (\\%~1\c$\windows\system32\drivers\etc\hosts) do (
if not "%%~zi"=="%hosts%" echo %~1>>1.txt 就能对比了。 不用在多执行映射了。 非常非常感谢。。 由于比较急才这样问的。 我目前正在学习批处理。 |
|
| 第15楼 Hanyeguxing | 发表于 2009-06-24 08:06 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
使用net use建立完连接,命令和批处理直接就可以直接读写远程文件
在这里for 直接读远程的host 文件 Originally posted by chenall at 2009-6-24 07:36: 现在的xp 里默认就集成着强大的帮助与支持中心 [ Last edited by Hanyeguxing on 2009-6-24 at 08:08 ] |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |