Board logo

标题: [系统相关] [已解决]批处理如何判断机器名单双并执行不同的程序 [打印本页]

作者: linuxlang    时间: 2010-11-29 07:52     标题: [已解决]批处理如何判断机器名单双并执行不同的程序

机器名 user001  user002 user003  .........
用批处理判断机器名为单数执行 dan.exe  
双数 执行 shuang.exe

[ 本帖最后由 linuxlang 于 2010-11-29 10:49 编辑 ]
作者: wc726842270    时间: 2010-11-29 08:36

可以通过SET /A 来进行取余记算,再用IF 进行判断,if "%a%"=="0" (start shuang.exe) else start dan.exe(这的破网吧没办没进行操作,命令执行完无显示,真不是一般纠结)
作者: linuxlang    时间: 2010-11-29 10:03

非常感谢

if "%a%"=="0"
这个0是代表偶数的意思吗? 0的引号是什么意思?
作者: hanyeguxing    时间: 2010-11-29 10:24

1,如果%LOGONSEVER% 或%USERDOMAIN%等就是计算机名,则直接:
  1. 2>nul set/a1/(%LOGONSEVER:~-1%%%2)&&start 奇数.exe||start 偶数.exe
复制代码
或:
  1. 2>nul set/a1/(%USERDOMAIN:~-1%%%2)&&start 奇数.exe||start 偶数.exe
复制代码
2,如果不是,则:
  1. @echo off
  2. for /f "skip=1 delims=" %%a in ('wmic computersystem get name') do set a=%%a
  3. 2>nul set/a1/(%a:~-4,1%%%2)&&start 奇数.exe||start 偶数.exe
复制代码

作者: linuxlang    时间: 2010-11-29 10:49

非常十分感谢各位大侠!
作者: leap    时间: 2010-11-29 10:51

  1. echo off&setlocal enabledelayedexpansion
  2. for /f %%i in ("%userdomain:~-3%") do set a=%%i
  3. set/a a=(1000%a%)%%1000
  4. set/a b=!a!/2
  5. set/a b=!b!*2
  6. if !b! equ !a! (start shuang.exe) else (start dan.exe)
  7. pause
复制代码

[ 本帖最后由 leap 于 2010-11-29 10:54 编辑 ]
作者: hanyeguxing    时间: 2010-11-29 11:06

原帖由 leap 于 2010-11-29 10:51 发表
echo off&setlocal enabledelayedexpansion
for /f %%i in ("%userdomain:~-3%") do set a=%%i
set/a a=(1000%a%)%%1000
set/a b=!a!/2
set/a b=!b!*2
if !b! equ !a! (start shuang.exe) else (start dan.exe)
pause

一个整数的奇偶性只与最后一位有关,而于位数、正负无关,所以截取时只需要截取最后一位。
set/a时会自动扩展,不需要单独开变量延迟,所以可以写成:
  1. echo off
  2. set/a a=%userdomain:~-1%%%2
  3. if %a%==0 (start shuang.exe)else start dan.exe
复制代码

[ 本帖最后由 hanyeguxing 于 2010-11-29 11:08 编辑 ]
作者: hanyeguxing    时间: 2010-11-29 12:58

时间:2010-11-29 12:42,  来自:linuxlang,  发送到:hanyeguxing
set/a1/(%USERDOMAIN:~-1%%%2)
1除以 (机器名最后一位除以2的余数)
是这个意思吗

详细说明一下运行过程:
  1. 2>nul set/a1/(%USERDOMAIN:~-1%%%2)&&start 奇数.exe||start 偶数.exe
复制代码
标准写法为:
  1. 2>nul set/a 1/(%USERDOMAIN:~-1%%%2) && start 奇数.exe || start 非奇数.exe
复制代码
2>nul 是用来屏蔽set/a命令的错误输出的
set/a执行运算
(%USERDOMAIN:~-1%%%2)截取%USERDOMAIN%的最后一位,并取余运算。当奇数时,值为1;偶数时为0。
1/    set/a有一个运算数学法则,即除数不能为0,当除数为0时返回错误,非0时不返回错误。这里的1不是关键,只是随便的一个合法的被除数而已。
&& start 奇数.exe || start 偶数.exe用来根据返回而执行命令。非0时语法正确而执行“start 奇数.exe”,0时set/a语法错误而执行“start 非奇数.exe”。
这里的set/a 没有使用=是因为不需要结果,而是通过语法正确与否来判断奇偶性的。

特别说明一下,如果%USERDOMAIN%最后一位不是数字(包括为空时),则set/a 1/(%USERDOMAIN:~-1%%%2)会因为没有操作数而出错,当然因为2>nul的关系会看不到错误返回,但这个语法错误会导致“start 非奇数.exe”运行。

[ 本帖最后由 hanyeguxing 于 2010-11-29 13:50 编辑 ]
作者: linuxlang    时间: 2010-11-29 13:00

2>nul set/a1/(%USERDOMAIN:~-1%%%2)&&start 奇数.exe||start 偶数.exe

set/a1/(%USERDOMAIN:~-1%%%2)
1除以 (机器名最后一位除以2的余数)

是这个意思吗
没有一个等式怎么判断的奇偶?

谁能给我详细解释一下这个一行就能实现的批处理啊
作者: skuny    时间: 2011-1-6 10:14

余数为零会产生错误  
为1就是正确的

分别与 ||  &&产生作用




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2