[ Last edited by wwx0423 on 2009-6-24 at 06:25 ]作者: chenall 时间: 2009-6-24 04:42 自己学习一下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 ]作者: wwx0423 时间: 2009-6-24 04:59 do 之后如果有指令集是不是 () 括起来。 我使用过 /?查看,但是帮助写的不是很详细。 看的不太懂。
我想要实现的功能是, 从 一个文本里 读取 计算机名,然后做映射, 如果映射不成功就把该计算机名记录下来。如果映射成功 则 判断该 计算机的 hots文件大小,如果大小不等于我要的大小,也把该计算机名记录下来,如果hots文件的大小等于我要的大小则不记录.断开映射, 继续重新读取下一个计算机名。 之前你有教过我怎么去hots的文件大小。
但是 现在 映射的成功和失败判定? 和 让for读一个计算机名后执行完需要的命令后再去读第二个计算机名, 好像for /f 他是全部读取完 再执行吧?
[ Last edited by wwx0423 on 2009-6-24 at 06:25 ]作者: wwx0423 时间: 2009-6-24 05:00 用 if 和 for 一起使用 最好了。
但是if 和for 的使用 和变量 都不会 ,刚刚才从你那得知 %i和 %%i 在cmd和批处理中的区别。作者: wwx0423 时间: 2009-6-24 05:13 chenall 在吗? 你能上一下QQ吗?作者: Hanyeguxing 时间: 2009-6-24 05:29 如果你很想用if ,可以使用语法if [not] errorlevel number command [else expression]作者: wwx0423 时间: 2009-6-24 06:06 不用 if 能做到 我想要实现的功能吗?
当当只用for 能实现?
好几个判断的地方。 判断 是否映射成功, 判断文件大小是否等于我要的值。作者: Hanyeguxing 时间: 2009-6-24 06:22 你在1楼有说要判断文件大小吗?自己看帮助吧作者: wwx0423 时间: 2009-6-24 06:23 主要的问题在3楼呀。 作者: chenall 时间: 2009-6-24 07:15 不知是不是没有注意看贴,我上面已经有例子了.
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作者: wwx0423 时间: 2009-6-24 07:23 看不懂你写的。
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
[ Last edited by wwx0423 on 2009-6-24 at 07:24 ]作者: Hanyeguxing 时间: 2009-6-24 07:32 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 ]作者: chenall 时间: 2009-6-24 07:36 多谢楼上的解释,
现在网络很方便.而且CMD的帮助都是中文的,应该学起来也比较快.作者: wwx0423 时间: 2009-6-24 07:57 非常感谢。 我发现 直接 for %%i in (\\%~1\c$\windows\system32\drivers\etc\hosts) do (
if not "%%~zi"=="%hosts%" echo %~1>>1.txt 就能对比了。 不用在多执行映射了。