标题: [ 新手习题 1 ] 批处理数值型变量的交换 [打印本页]
作者: wxcute 时间: 2008-11-26 12:10 标题: [ 新手习题 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 分。
作者: qq641255849 时间: 2008-11-26 13:16
set /a 行不?
───────────────── 版主回复 ─────────────────
执行:wxcute
回复:[2008-11-26] 可以试一下,答错也没有关系的。
───────────────── 版主回复 ─────────────────
作者: hxf0759 时间: 2008-11-26 16:27 标题: 看我这个行不行
- @echo off
- echo 请输第一个数字
- set/p a=
- echo a=%a%
-
- echo 请输第二个数字
- set/p b=
- echo b=%b%
-
- echo 开始转换 pause
-
- set /a c=%a%
- set /a a=%b%
- set /a b=%c%
-
- echo 转换结束
- echo a=%a%
- echo b=%b%
复制代码
[ 本帖最后由 hxf0759 于 2008-11-27 09:21 编辑 ]
作者: pusofalse 时间: 2008-11-26 17:59
只要明白set /a的特性就能简洁明了的解答此题了。
- If you use any of the logical or modulus operators, you will need to
- enclose the expression string in quotes. Any non-numeric strings in the
- expression are treated as environment variable names whose values are
- converted to numbers before using them. If an environment variable name
- is specified but is not defined in the current environment, then a value
- of zero is used. This allows you to do arithmetic with environment
- variable values without having to type all those % signs to get their
- values.
复制代码
作者: BBCC 时间: 2008-11-26 19:33
原帖由 qq641255849 于 2008-11-26 13:16 发表
set /a 行不?
───────────────── 版主回复 ─────────────────
执行:wxcute
回复:[2008-11-26] 可以试一下,答错也没有关系的。
───────────────── 版 ...
原因是没在windows下,没法测试...
作者: pusofalse 时间: 2008-11-28 21:38
- @echo off
- Set "a=%random%" & set "b=%random%"
- echo %a% %b%
- set /a b=%a%,a=%b%
- echo %a% %b%
- pause
- Set "a=%random%" & set "b=%random%"
- echo %a% %b%
- set /a b=a,a=b
- echo %a% %b%
- pause
复制代码
希望可以通过如上代码了解到set /a的特性。
作者: Batcher 时间: 2008-11-29 18:34
- @echo off
- set a=2
- set b=3
- set /a a=b+(b=a)*0
- echo %a%
- echo %b%
- pause
复制代码
作者: nomyself 时间: 2008-12-4 18:28
通过变量交换比较常见,交换的方法很多,加减,乘除,异或.......- ::加减交换
- @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
复制代码
- ::乘除交换
- @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
复制代码
作者: jsj30651 时间: 2008-12-4 18:40
- @echo off
- set a=%random% & set b=%random%
- echo a=%a%
- echo b=%b%
- echo.
- set a=%b% & set b=%a%
- echo a=%a%
- echo b=%b%
- pause
复制代码
利用批处理执行命令时候的预处理来交换变量
[ 本帖最后由 jsj30651 于 2008-12-4 18:50 编辑 ]
作者: rat 时间: 2008-12-4 18:51
::乘除交换
@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,怎么办?
作者: nomyself 时间: 2008-12-5 16:21 标题: 回复 11楼 的帖子
恩,当时没有想那么多,多谢提醒。
作者: yan 时间: 2008-12-5 19:44 标题: 这个有问题吗?
echo 输入a=
set/p a=
echo 输入 b=
set/p b=
set c=%a%
set a=%b%
set b=%c%
pause
作者: firewolf85 时间: 2008-12-7 15:20
set c=%a%
set a=%b%
set b=%c%
echo %a%
echo %b%
作者: myzwd 时间: 2009-3-2 17:12 标题: 回复 1楼 的帖子
- @echo off
- set a=2
- set b=3
- echo.------------
- set tt=a
- set a=b
- set b=tt
- echo.ok
复制代码
作者: wild84 时间: 2009-3-4 00:28 标题: 回复 3楼 的帖子
这个代码运行不了。。
作者: pzspdl 时间: 2009-3-4 21:33
@echo off
set/p a=请输入a的数值 & set/p b=请输入b的数值
echo a是%a%
echo b是%b%
goto x
set/p a=%b% & set/p b=%a%
:x
echo ab交换后a是%b%
echo ab交换后b是%a%
pause
作者: rat 时间: 2009-3-4 22:44 标题: xchg指令
- @echo off
- set a=2
- set b=3
- (echo a100&echo mov ax,%a%&echo mov bx,%b%&more /e +5 "%~f0")|debug|find /v ""
- pause&exit/b
- xchg ax,bx
-
- t=100 3
- q
复制代码
作者: qxhonker 时间: 2009-3-5 16:03
- @echo off
- set /a a=5
- set /a b=3
- set /a a=%a%+%b%
- set /a b=%a%-%b%
- set /a a=%a%-%b%
- echo %a%
- echo %b%
- pause
复制代码
作者: qxhonker 时间: 2009-3-5 16:08
刚发现我跟9楼的一样
同时佩服8楼 这个代码最好
作者: qxhonker 时间: 2009-3-5 16:14
根据8楼的启发 发现这样也行- @echo off
- set /a a=5
- set /a b=3
- for /l %%i in (1,1,1) do set a=%b%&set b=%a%
- echo %a%
- echo %b%
- pause
复制代码
跟变量延迟一个道理 吼吼 能不能给我点分呀
作者: yycup1111 时间: 2009-3-5 18:10 标题: %E5%9B%9E%E5%A4%8D 21楼 %E7%9A%84%E5%B8%96%E5%AD%90
学习中…………………
作者: sjzong 时间: 2009-5-8 22:39
很好!!有的真的有意思!
作者: Taurus 时间: 2009-7-7 07:58
数值交换
@echo off&set/a A=2,B=3
set/a A=B,B=%A%
echo A=%A% , B=%B%&pause>nul
任何变量
@echo off&set A=上 &set B=下
set A=%B% &set B=%A%
echo A=%A% , B=%B% &pause>nul
作者: eneir 时间: 2009-7-9 04:00 标题: 巧解
@echo off
set /p a=请输入a:
set /p b=请输入b:
set a=%b% & set b=%a%
echo a=%a% b=%b%
pause>nul
里面涉及到变量延迟,我就不过多解释了,有兴趣有多找些相关资料学习
作者: eneir 时间: 2009-7-9 04:11 标题: 一般解
@echo off
set /p a=请输入a:
set /p b=请输入b:
set /a a+=%b%
set /a b=%a%-%b%
set /a a-=%b%
echo a=%a% b=%b%
pause>nul
此程序只能a,b是数值时可行,有字母就不行,上面的程序却无论a,b是数值还是字母,甚至两者混合都可行
作者: 风行者 时间: 2009-7-13 00:17
- @echo off
- set a=2
- set b=3
- set a=%b% & set b=%a%
- echo a变为%a% b变为%b%
- pause
复制代码
噢,24,25楼的用了
作者: loop3231262 时间: 2009-7-16 12:12
@echo off
set a=2
set b=3
set a=%b% & set b=%a%
echo %a% & echo %b%
pause
只要用上管道,由于预处理 好象就可以了……
作者: wxcute 时间: 2009-7-16 20:06 标题: 回复 28楼 loop3231262 的帖子
管道在哪里? 不是连接符吗?
作者: tvsdlxy 时间: 2009-7-25 15:58
@echo off
set/p a=请输入a:
set/p b=请输入b:
set c=0
set /a c=%a%
set /a a=%b%
set /a b=%c%
echo %a% %b%
pause
作者: nopr 时间: 2009-8-6 20:47 标题: 回复 7楼 的帖子
- Set "a=%random%" & set "b=%random%"
- echo %a% %b%
- set /a b=a,a=b
- echo %a% %b%
复制代码
好像应该是set/a b=%a%,a=%b%吧,,好像少了%%号
作者: nopr 时间: 2009-8-6 20:56
- Set "a=%random%" & set "b=%random%"
- echo %a% %b%
- set b=%a%&set a=%b%
- echo %a% %b%
- pause
复制代码
我怎么只用set 也可以呢,不用set/a啊
作者: hs4814 时间: 2009-8-9 22:01
- @echo off
- set /p a=请输入第一个数:
- set /p b=请输入第二个数:
- echo 交换前a的值是:%a%
- echo 交换前b的值是:%b%
- set c=%a%
- set a=%b%
- set b=%c%
- setlocal enabledelayedexpansion
- echo 交换后a的值是: %a%
- echo 交换后b的值是:%b%
-
- pause>nul
复制代码
作者: Lumiere 时间: 2009-8-9 22:12
题目的意思没看懂……
作者: wayaoqiang 时间: 2009-8-12 16:51
- @echo off
- set a=2
- set b=3
- echo a=%a%
- echo b=%b%
- set /a a=a+b
- set /a b=a-b
- set /a a=a-b
- echo a=%a%
- echo b=%b%
- pause
复制代码
[ 本帖最后由 wayaoqiang 于 2009-8-17 21:06 编辑 ]
作者: wxcute 时间: 2009-8-15 21:42 标题: 回复 34楼 Lumiere 的帖子
测试一下其他回复的代码就能了解意思了。
作者: 基拉freedom 时间: 2009-8-15 22:13
不用变量延迟 直接换就可以了....
作者: Hysteria 时间: 2009-8-18 13:15
[code]
@echo off
set /p numa=a=
set /p numb=b=
cls
echo a=%numa% b=%numb%
pause
goto exchange
:exchange
cls
echo 交换后如下:
echo a=%numb% b=%numa%
pause
[code/]
作者: atsivsucks 时间: 2009-8-18 21:45
- @echo off
-
- set a=23
- set b=32
-
- set t=%a%
- set a=%b%
- set b=%t%
-
- echo a:%a%, b:%b%
-
- pause
复制代码
[ 本帖最后由 atsivsucks 于 2009-8-19 08:55 编辑 ]
作者: couth 时间: 2009-8-19 12:32
@echo off
set a=2
set b=3
echo 原来的值:a=%a% b=%b%
set b=%a% & set a=%b%
echo 交换后的值:a=%a% b=%b%
pause
这个测试可以。
作者: poxi 时间: 2010-7-19 22:33
答:
- @echo off
- set a=2
- set b=3
- echo 替换前: a=%a% b=%b%
- set zs=%a%
- call set a=%%a:%a%=%b%%%
- call set b=%%a:%b%=%zs%%%
- echo 替换后: a=%a% b=%b%
- pause>nul
复制代码
====可以吧......
end;
作者: 慕夜蓝化 时间: 2014-12-24 19:54
本帖最后由 慕夜蓝化 于 2014-12-24 19:56 编辑
在for语句中使用变量延迟可以很好的解决问题。
@echo off
set /a a=2,b=3
for /l %%i in (1 1 1) do (
set b=%a%&set a=%b%
call echo,%%a%% %%b%%
)
pause
不,只要是在复合语句中,都能达到题目的要求
@echo off
set /a a=2,b=3
set b=%a%&set a=%b%
echo,%a% %b%
pause
作者: dengyuli 时间: 2015-1-3 11:01
- @echo off
- setlocal enabledelayedexpansion
- set /p a=请输入变量a的值:
- set /p b=请输入变量b的值:
- for /f "delims=# tokens=1-3 eol=" %%a in ('echo !b!#!a!') do (
- set a=%%a
- set b=%%b
- goto:end
- )
- :end
- echo a=!a!
- echo b=!b!
- pause>nul
复制代码
变量a和b中不能含有#号,其他都可以。
作者: Colin3 时间: 2015-1-7 18:56
- @echo off
-
- rem 交换前的赋值
- set a=%random%
- set b=%random%
- echo 交换前:a=%a%,b=%b%
- echo.
-
- rem 交换后的结果
- set temp=%a%
- set a=%b%
- set b=%temp%
- echo 交换后:a=%a%,b=%b%
-
- pause
复制代码
作者: 终_焉 时间: 2015-2-25 15:43
- @echo off
- ::交换变量a,b的值
- set /p a=请输入a=
- set /p b=请输入b=
- set a=%b%&set b=%a%
- echo 交换数值后,a=%a%,b=%b%
- pause
复制代码
作者: lqdhg 时间: 2015-3-5 10:37
@echo off
set /p x=请输入a的值
set /p y=请输入b的值
echo 您输入的a的信息是%x%
echo 您输入的b的信息是%y%
echo 开始转换
set a=%y%
set b=%x%
echo 转换之后a的信息是%a%
echo 转换之后b的信息是%b%
pause
简化的
@echo off
set /p x=请输入a的值
set /p y=请输入y的值
echo 您输入的a的值是%x%
echo 您输入的b的值是%y%
echo 转换之后您输入的a的值是%y%
echo 转换之后您输入的b的值是%x%
pause
作者: zzw8822 时间: 2015-4-21 07:50
学习了。。。。。
作者: 尘丶 时间: 2015-5-1 09:33
- @echo off
- set /a a=%random%%%10
- echo %a%
- set /a b=%random%%%9
- echo %b%
- set c=%a%
- set d=%b%
- set b=%c%
- set a=%d%
- echo %a%
- echo %b%
- pause
复制代码
作者: 当个IT不容易啊 时间: 2015-5-22 10:15
谢谢! 第一个批处理诞生
作者: Lornan 时间: 2015-5-26 21:41
本帖最后由 Lornan 于 2015-5-26 21:43 编辑
- @echo off
- Setlocal enabledelayedexpansion
- ::CODER BY Lornan POWERD BY iBAT 1.6
- set /p a=请输入第一个数字:
- set /p b=请输入第二个数字:
- echo.请按任意键继续&pause>nul
- cls
- echo.
- echo.你输入的a是%a%
- echo.你输入的b是%b%
- echo.按任意键开始交换a与b的值。
- echo.&pause>nul
- set c=%a%
- set a=%b%
- set b=%c%
- echo.交换完毕。按任意键查看。
- echo.&pause>nul
- cls
- echo.现在a的值是%a%,b的值是%b%.
- pause
复制代码
感觉应该没问题吧。最近C语言老师逼的。总是把C语言的东西用在批处理上来。。。
作者: 437153 时间: 2015-6-8 11:36
- set a=2
- set b=3
- echo a=%a% b=%b%
- echo 交换后
- set/a c=%a%*%b%
- set a=%b%
- set/a b=%c%/%a%
- echo a=%a% b=%b%
复制代码
作者: 437153 时间: 2015-6-8 11:40
回复 7# Batcher
这是什么啊?完全看不懂啊!!
作者: impk 时间: 2019-8-26 15:23
- @echo off
- set a=2 && set b=3
- set /a b=%a% && set /a a=%b%
- echo %a% %b%
- pause
复制代码
作者: 唯尘 时间: 2022-10-27 10:50
@echo off
set a=2
set b=3
echo %a% %b%
set c=%a%
set a=%b%
set b=%c%
echo %a% %b%
pause>nul
作者: 772074834 时间: 2023-5-4 17:59
@echo off
set /P "a=输入变量a="
set /p "b=输入变量b="
set /a c=%a%
set /a a=%b%
set /a b=%c%
echo a=%a%
echo b=%b%
pause
作者: LTSC1809 时间: 2023-5-4 19:13
回复 1# wxcute - set a=2
- set b=3
- set bf=b
- set af=a
- set a=bf
- set b=af
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |