[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

[ 本帖最后由 linuxlang 于 2010-11-29 10:49 编辑 ]
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

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

分别与 ||  &&产生作用

TOP

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

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

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

谁能给我详细解释一下这个一行就能实现的批处理啊

TOP

时间: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 编辑 ]
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 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 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

  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 编辑 ]

TOP

非常十分感谢各位大侠!

TOP

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
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

非常感谢

if "%a%"=="0"
这个0是代表偶数的意思吗? 0的引号是什么意思?

TOP

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

TOP

返回列表