中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于判断计算机名的启动批处理,请教!
作者:
标题: 关于判断计算机名的启动批处理,请教! 上一主题 | 下一主题
lhkyzh
初级用户





积分 34
发帖 12
注册 2006-6-4
状态 离线
『楼 主』:  关于判断计算机名的启动批处理,请教!

是这样。上面要求网吧安装净网先锋,我把它的执行文件提出来,放在服务器上,利用客户机的启动批处理执行。 但是我只想让部分机子运行净网先锋,其他的客户机还是运行一个监视窗口的软件。 客户机系统是一起克出来的。
   如果判断某个文件存在的话。我需要去一台台添加某个文件  
在网上找到一个实例,利用机器名判断是否运行命令,但有个问题不会解决:
      所有客户机启动都会执行\\user01上的up.bat 内容是:
@echo off
for /f "skip=1 tokens=1" %%N IN (\\user01\up$\name.ini) Do if %ComputerName%==%%N (
  @echo 本台机器特殊!执行其他命令   
  call \\user01\up$\up1.bat
      ) Else (
  @echo 此机执行正常命令  
call \\user01\up$\up2.bat
      
    )
服务器上up1.bat如下:

@echo off
start  \\192.168.0.101\up$\禁止.exe
start  \\user01\up$\净网文件\MainPro.exe
exit


服务器上up2.bat如下:
@echo off
start  \\192.168.0.101\up$\禁止.exe
echo. & exit

name.ini内容如下:

  [ComputerName]
  AT11
  AT10
         上报完毕。
    name.ini里存在的计算名的客户机就执行up1.bat 也就是运行净网先锋。 其他客户机运行禁止.exe
   问题是:它只判断name.ini里第2行。AT11,AT10都写进name.ini里。 但是只有AT11会运行up1.bat, 把AT10写在上面,也只是AT10能运行。
  怎么弄就只有一台能够附和运行up1.bat的条件

小弟刚学批处理。关于for的用法也是第一次使用。请求大家帮助! 感谢先

2006-6-5 21:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lhkyzh
初级用户





积分 34
发帖 12
注册 2006-6-4
状态 离线
『第 2 楼』:  

早上弄到晚上。。快被这个折磨死了。。大虾们偶真的需要你们的帮助!

2006-6-6 04:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fan927
初级用户





积分 82
发帖 31
注册 2006-5-23
状态 离线
『第 3 楼』:  

for /f "skip=1 tokens=1" %%N IN (\\user01\up$\name.ini) Do if %ComputerName%==%%N (

你的这条语句中 skip=1 的意思是忽略第一行,是不是这里的问题.

2006-6-6 13:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by lhkyzh at 2006-6-5 21:55:
问题是:它只判断name.ini里第2行。AT11,AT10都写进name.ini里。 但是只有AT11会运行up1.bat, 把AT10写在上面,也只是AT10能运行。
  怎么弄就只有一台能够附和运行up1.bat的条件

  不知道你想解决的问题是什么。
  到底是想让name.ini内从第二行开始的所有AT(按照你的描述,AT11和AT10好象都是计算机名)都执行up1.bat程序?还是在选择运行up1.bat和up2.bat的时候,无论如何都只能运行up1.bat而不能运行up2.bat?
  "怎么弄就只有一台能够附和运行up1.bat的条件"一句让人无法理解。"附和"==“符合”?

2006-6-6 14:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 5 楼』:  

Re lhkyzh:

      skip=1是为了略过 [ComputerName] 一行,这不存在问题。

      问题在于你在for语句中使用了else,也就是说,当在for的第一轮循环中,假设%%N被替换为AT11,则在AT10机中运行时,程序流程会在if失败后流向else中去call up2。

      另外,for循环应该有两轮,而在第二轮循环中,%%N替换为AT10,在AT10机中则应又流向if句中去call up1,但是你的测试中,显然没有第二轮循环的流向,那是因为你在if/else中的up1/up2中使用exit跳出了cmd环境,因此第二轮循环被忽略。

      解决的方案如下(假设up1.bat中未使用exit跳出):
@echo off
set match=
for /f "skip=1" %%N IN (\\user01\up$\name.ini) do (
    if "%ComputerName%"=="%%N" (
        echo 本台机器特殊!执行其他命令
        call \\user01\up$\up1.bat
        set match=true
    )
)
if not "%match%"=="true" (
    @echo 此机执行正常命令  
    call \\user01\up$\up2.bat
)
[ Last edited by willsort on 2006-6-6 at 19:41 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-6 19:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: