|
wwx0423
初级用户
积分 33
发帖 30
注册 2009-2-19
状态 离线
|
『楼 主』:
继续再来一个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 ]
|
|
2009-6-24 04:37 |
|
|
chenall
银牌会员
积分 1276
发帖 469
注册 2002-12-23 来自 福建泉州
状态 离线
|
『第
2 楼』:
自己学习一下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 ]
|
QQ:366840202
http://chenall.net |
|
2009-6-24 04:42 |
|
|
wwx0423
初级用户
积分 33
发帖 30
注册 2009-2-19
状态 离线
|
『第
3 楼』:
do 之后如果有指令集是不是 () 括起来。 我使用过 /?查看,但是帮助写的不是很详细。 看的不太懂。
我想要实现的功能是, 从 一个文本里 读取 计算机名,然后做映射, 如果映射不成功就把该计算机名记录下来。如果映射成功 则 判断该 计算机的 hots文件大小,如果大小不等于我要的大小,也把该计算机名记录下来,如果hots文件的大小等于我要的大小则不记录.断开映射, 继续重新读取下一个计算机名。 之前你有教过我怎么去hots的文件大小。
但是 现在 映射的成功和失败判定? 和 让for读一个计算机名后执行完需要的命令后再去读第二个计算机名, 好像for /f 他是全部读取完 再执行吧?
[ Last edited by wwx0423 on 2009-6-24 at 06:25 ]
|
|
2009-6-24 04:59 |
|
|
wwx0423
初级用户
积分 33
发帖 30
注册 2009-2-19
状态 离线
|
『第
4 楼』:
用 if 和 for 一起使用 最好了。
但是if 和for 的使用 和变量 都不会 ,刚刚才从你那得知 %i和 %%i 在cmd和批处理中的区别。
|
|
2009-6-24 05:00 |
|
|
wwx0423
初级用户
积分 33
发帖 30
注册 2009-2-19
状态 离线
|
『第
5 楼』:
chenall 在吗? 你能上一下QQ吗?
|
|
2009-6-24 05:13 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
|
2009-6-24 05:29 |
|
|
wwx0423
初级用户
积分 33
发帖 30
注册 2009-2-19
状态 离线
|
『第
7 楼』:
不用 if 能做到 我想要实现的功能吗?
当当只用for 能实现?
好几个判断的地方。 判断 是否映射成功, 判断文件大小是否等于我要的值。
|
|
2009-6-24 06:06 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
|
2009-6-24 06:22 |
|
|
wwx0423
初级用户
积分 33
发帖 30
注册 2009-2-19
状态 离线
|
|
2009-6-24 06:23 |
|
|
chenall
银牌会员
积分 1276
发帖 469
注册 2002-12-23 来自 福建泉州
状态 离线
|
『第
10 楼』:
不知是不是没有注意看贴,我上面已经有例子了.
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
|
QQ:366840202
http://chenall.net |
|
2009-6-24 07:15 |
|
|
wwx0423
初级用户
积分 33
发帖 30
注册 2009-2-19
状态 离线
|
『第
11 楼』:
看不懂你写的。
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 ]
|
|
2009-6-24 07:23 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
『第
12 楼』:
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 ]
|
批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
2009-6-24 07:32 |
|
|
chenall
银牌会员
积分 1276
发帖 469
注册 2002-12-23 来自 福建泉州
状态 离线
|
『第
13 楼』:
多谢楼上的解释,
楼主如果真想学好批处理.
应该好好看一下CMD命令的帮助,善用 /?
里面一般都有例子.试一次可能看不出来有什么作用,那就多试几次.
我从DOS的命令开始学起的,当时网络还不是很发达,都是一条命令/?然后一个一个参数加上去尝试的.
现在网络很方便.而且CMD的帮助都是中文的,应该学起来也比较快.
|
QQ:366840202
http://chenall.net |
|
2009-6-24 07:36 |
|
|
wwx0423
初级用户
积分 33
发帖 30
注册 2009-2-19
状态 离线
|
『第
14 楼』:
非常感谢。 我发现 直接 for %%i in (\\%~1\c$\windows\system32\drivers\etc\hosts) do (
if not "%%~zi"=="%hosts%" echo %~1>>1.txt 就能对比了。 不用在多执行映射了。
非常非常感谢。。 由于比较急才这样问的。 我目前正在学习批处理。
|
|
2009-6-24 07:57 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
『第
15 楼』:
使用net use建立完连接,命令和批处理直接就可以直接读写远程文件
在这里for 直接读远程的host 文件
Quote: | Originally posted by chenall at 2009-6-24 07:36:
多谢楼上的解释,
楼主如果真想学好批处理.
应该好好看一下CMD命令的帮助,善用 /?
里面一般都有例子.试一次可能看不出来有什么作用,那就多试几次.
我从DOS的命令开始学起的,当时网络还不是很发达,都是一条命令/?然后一个一个参数加上去尝试的.
现在网络很方便.而且CMD的帮助都是中文的,应该学起来也比较快. |
|
现在的xp 里默认就集成着强大的帮助与支持中心
[ Last edited by Hanyeguxing on 2009-6-24 at 08:08 ]
|
批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
2009-6-24 08:06 |
|