找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 109914|回复: 54

[ 新手习题 1 ] 批处理数值型变量的交换

[复制链接]
发表于 2008-11-26 12:10:48 | 显示全部楼层 |阅读模式
我们假设值为数字的变量为数值型变量。
那么如何交换两个不确定的数值型变量呢?
如:
set a=2
set b=3
因为 a 不一定等于 2,b 不一定等于 3,所以不能用 set a=3 与 set b=2 这种方式来交换。

目的:掌握对数值型变量的交换设置方法。

要求:交换并显示变量 a、b,方法不限。

评分:代码可读性 1 分;
   首个新方法 5 分,第二个 4 分,依次类推,最少 2 分;
   一人多种方法,新方法追加 3 分,已经出现过的方法追加 1 分。
发表于 2008-11-26 13:16:48 | 显示全部楼层
set /a 行不?

───────────────── 版主回复 ─────────────────
执行:wxcute
回复:[2008-11-26] 可以试一下,答错也没有关系的。
───────────────── 版主回复 ─────────────────

发表于 2008-11-26 16:27:24 | 显示全部楼层

看我这个行不行

  1. @echo off
  2. echo 请输第一个数字
  3. set/p a=
  4. echo a=%a%

  5. echo 请输第二个数字
  6. set/p b=
  7. echo b=%b%

  8. echo 开始转换 pause

  9. set /a c=%a%
  10. set /a a=%b%
  11. set /a b=%c%

  12. echo 转换结束
  13. echo a=%a%
  14. echo b=%b%
复制代码

[ 本帖最后由 hxf0759 于 2008-11-27 09:21 编辑 ]

评分

参与人数 1PB +5 收起 理由
wxcute + 5 GOOD,不过请用 code 括起代码

查看全部评分

发表于 2008-11-26 17:59:50 | 显示全部楼层
只要明白set /a的特性就能简洁明了的解答此题了。
  1. If you use any of the logical or modulus operators, you will need to
  2. enclose the expression string in quotes.  Any non-numeric strings in the
  3. expression are treated as environment variable names whose values are
  4. converted to numbers before using them.  If an environment variable name
  5. is specified but is not defined in the current environment, then a value
  6. of zero is used.  This allows you to do arithmetic with environment
  7. variable values without having to type all those % signs to get their
  8. values.
复制代码
发表于 2008-11-26 19:33:40 | 显示全部楼层
原帖由 qq641255849 于 2008-11-26 13:16 发表
set /a 行不?

───────────────── 版主回复 ─────────────────
执行:wxcute
回复:[2008-11-26] 可以试一下,答错也没有关系的。
───────────────── 版 ...


原因是没在windows下,没法测试...
发表于 2008-11-28 21:38:09 | 显示全部楼层
  1. @echo off
  2. Set "a=%random%" & set "b=%random%"
  3. echo %a% %b%
  4. set /a b=%a%,a=%b%
  5. echo %a% %b%
  6. pause
  7. Set "a=%random%" & set "b=%random%"
  8. echo %a% %b%
  9. set /a b=a,a=b
  10. echo %a% %b%
  11. pause
复制代码
希望可以通过如上代码了解到set /a的特性。

评分

参与人数 1PB +3 收起 理由
rat + 3 不知道

查看全部评分

发表于 2008-11-29 18:34:25 | 显示全部楼层
  1. @echo off
  2. set a=2
  3. set b=3
  4. set /a a=b+(b=a)*0
  5. echo %a%
  6. echo %b%
  7. pause
复制代码

评分

参与人数 1PB +3 收起 理由
wxcute + 3 高人,还没见过这种方法。

查看全部评分

发表于 2008-12-4 18:28:22 | 显示全部楼层
通过变量交换比较常见,交换的方法很多,加减,乘除,异或.......
  1. ::加减交换
  2. @echo off
  3. set a=2
  4. set b=4
  5. set /a a+=%b%
  6. set /a b=%a%-%b%
  7. set /a a-=%b%
  8. echo %a%   %b%
  9. pause<nul
复制代码
  1. ::乘除交换
  2. @echo off
  3. set a=2
  4. set b=4
  5. set /a a*=%b%
  6. set /a b=%a%/%b%
  7. set /a a/=%b%
  8. echo %a%   %b%
  9. pause<nul
复制代码

评分

参与人数 1PB +6 收起 理由
wxcute + 6 两种交换法

查看全部评分

发表于 2008-12-4 18:40:03 | 显示全部楼层
  1. @echo off
  2. set a=%random% & set b=%random%
  3. echo a=%a%
  4. echo b=%b%
  5. echo.
  6. set a=%b% & set b=%a%
  7. echo a=%a%
  8. echo b=%b%
  9. pause
复制代码
利用批处理执行命令时候的预处理来交换变量

[ 本帖最后由 jsj30651 于 2008-12-4 18:50 编辑 ]
发表于 2008-12-4 18:51:33 | 显示全部楼层
::乘除交换
@echo off
set a=2
set b=4
set /a a*=%b%
set /a b=%a%/%b%
set /a a/=%b%
echo %a%   %b%
pause<nul


如果a和b中至少有一个为0,怎么办?
发表于 2008-12-5 16:21:04 | 显示全部楼层

回复 11楼 的帖子

恩,当时没有想那么多,多谢提醒。
发表于 2008-12-5 19:44:50 | 显示全部楼层

这个有问题吗?

echo 输入a=
set/p a=
echo 输入 b=
set/p b=
set c=%a%
set a=%b%
set b=%c%
pause

评分

参与人数 1PB +3 收起 理由
wxcute + 3 代码没问题,回帖有点问题。代码用[code][/ ...

查看全部评分

发表于 2008-12-7 15:20:22 | 显示全部楼层
set c=%a%
set a=%b%
set b=%c%
echo %a%
echo %b%

评分

参与人数 1PB +2 收起 理由
wxcute + 2 ^_^ 你够懒的,边a、b等于什么你都不写

查看全部评分

发表于 2009-3-2 17:12:03 | 显示全部楼层

回复 1楼 的帖子

  1. @echo off
  2. set a=2
  3. set b=3
  4. echo.------------
  5. set tt=a
  6. set a=b
  7. set b=tt
  8. echo.ok
复制代码

评分

参与人数 1PB +4 收起 理由
wxcute + 4 中间变量交换法。

查看全部评分

发表于 2009-3-4 00:28:33 | 显示全部楼层

回复 3楼 的帖子

这个代码运行不了。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:11 , Processed in 0.027556 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表