标题: [系统相关] [已解决]批处理如何判断机器名单双并执行不同的程序 [打印本页]
作者: 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%等就是计算机名,则直接:- 2>nul set/a1/(%LOGONSEVER:~-1%%%2)&&start 奇数.exe||start 偶数.exe
复制代码
或:- 2>nul set/a1/(%USERDOMAIN:~-1%%%2)&&start 奇数.exe||start 偶数.exe
复制代码
2,如果不是,则:- @echo off
- for /f "skip=1 delims=" %%a in ('wmic computersystem get name') do set a=%%a
- 2>nul set/a1/(%a:~-4,1%%%2)&&start 奇数.exe||start 偶数.exe
复制代码
作者: linuxlang 时间: 2010-11-29 10:49
非常十分感谢各位大侠!
作者: 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
复制代码
[ 本帖最后由 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时会自动扩展,不需要单独开变量延迟,所以可以写成:- echo off
- set/a a=%userdomain:~-1%%%2
- 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的余数)
是这个意思吗
详细说明一下运行过程:- 2>nul set/a1/(%USERDOMAIN:~-1%%%2)&&start 奇数.exe||start 偶数.exe
复制代码
标准写法为:- 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://bathome.net./) |
Powered by Discuz! 7.2 |