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

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

我们假设值为数字的变量为数值型变量。
那么如何交换两个不确定的数值型变量呢?
如:
set a=2
set b=3
因为 a 不一定等于 2,b 不一定等于 3,所以不能用 set a=3 与 set b=2 这种方式来交换。

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

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

评分:代码可读性 1 分;
   首个新方法 5 分,第二个 4 分,依次类推,最少 2 分;
   一人多种方法,新方法追加 3 分,已经出现过的方法追加 1 分。

set /a 行不?

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

TOP

看我这个行不行

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

评分人数

    • wxcute: GOOD,不过请用 code 括起代码PB + 5

TOP

只要明白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.
复制代码
心绪平和,眼藏静谧。

TOP

原帖由 qq641255849 于 2008-11-26 13:16 发表
set /a 行不?

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


原因是没在windows下,没法测试...
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

  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的特性。
1

评分人数

    • rat: 不知道PB + 3
心绪平和,眼藏静谧。

TOP

  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
复制代码
1

评分人数

    • wxcute: 高人,还没见过这种方法。PB + 3
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

通过变量交换比较常见,交换的方法很多,加减,乘除,异或.......
  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
复制代码
1

评分人数

TOP

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

TOP

::乘除交换
@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,怎么办?

TOP

回复 11楼 的帖子

恩,当时没有想那么多,多谢提醒。

TOP

这个有问题吗?

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

评分人数

    • wxcute: 代码没问题,回帖有点问题。代码用[code][/ ...PB + 3

TOP

set c=%a%
set a=%b%
set b=%c%
echo %a%
echo %b%
1

评分人数

    • wxcute: ^_^ 你够懒的,边a、b等于什么你都不写PB + 2

TOP

回复 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
复制代码
1

评分人数

    • wxcute: 中间变量交换法。PB + 4

TOP

回复 3楼 的帖子

这个代码运行不了。。

TOP

返回列表