标题: [其他] for循环判断问题 [打印本页]
作者: zhaokeistc 时间: 2016-11-25 10:51 标题: for循环判断问题
- echo off
- setlocal enabledelayedexpansion
- set var=haha,haha1,haha2
- for %%i in (%var%) do (
- echo %%i
- )
- pause
复制代码
执行此代码输出结果为
这个没什么问题,然后稍加改动变成如下- echo off
- setlocal enabledelayedexpansion
- set var=haha,haha1,haha2
- if %var% = haha (
- echo haha
- goto :eof
- )
- for %%i in (%var%) do (
- echo %%i
- )
- pause
复制代码
就无法正确执行了,输出结果为
请教各位大神,这是什么原因,怎么解决?
作者: pcl_test 时间: 2016-11-25 11:08
for:关我什么事,lz自己不学好基础,连判断都不会写
作者: zhaokeistc 时间: 2016-11-25 14:48
回复 2# pcl_test
写的有问题吗?你是指那个判断进不去?
作者: CommandBatCmd 时间: 2016-11-25 15:24
回复 1# zhaokeistc
我猜想LZ是笔误,丢了if中的一个等号,
可逗号又在给你捣蛋。
作者: zhaokeistc 时间: 2016-11-25 17:23
回复 4# CommandBatCmd
那个确实笔误少些了个=号 不过没影响 那个判断肯定不会进 主要是感觉有了那个 for的()对应出了问题 不知道什么原因 也不知道怎么解决
作者: 0000 时间: 2016-11-25 19:12
04:if %var% = haha (...)
04:if "%var%" == "haha" (...)
作者: CommandBatCmd 时间: 2016-11-25 21:09
回复 5# zhaokeistc
一个等号是赋值运算,两个等号是比较运算;
逗号直接暴露在命令行上为特殊字符(命令分隔符),用双引号包括才不会产生歧义;
像楼上的那样修改代码后,逗号就不兴风作浪了。
作者: 523066680 时间: 2016-11-25 21:19
本帖最后由 523066680 于 2016-11-25 21:25 编辑
谜之语言
- my @array = qw/ haha haha1 haha2 /;
- exit if ( "haha3" ~~ @array );
- print join("\n", @array);
作者: happy886rr 时间: 2016-11-25 23:01
回复 8# 523066680 perl就是优雅,
作者: GNU 时间: 2016-11-27 20:41
- @echo off
- set var=haha,haha1,haha2
- if "%var%" equ "haha" (
- echo haha
- goto :end
- )
- for %%i in (%var%) do (
- echo,%%i
- )
-
- :end
- pause
复制代码
作者: zhaokeistc 时间: 2016-11-28 10:09
回复 7# CommandBatCmd
不行的,我那个少个等号确实是笔误,真实代码里是没少的,而且我的逗号就是要作为分隔符来使用的,所以不能有引号。
实际上我是想遍历那个var,如图1是可以正常遍历的,但是在之前加了个if判断后,如图2就不能遍历了。
作者: happy886rr 时间: 2016-11-28 10:14
回复 11# zhaokeistc
为何不学批处理基础,if比较字符串时必须加引号,必须双等号。这是基础啊!
if "%var%" == "haha"
作者: CommandBatCmd 时间: 2016-11-28 11:36
回复 11# zhaokeistc
进行遍历变量“var”,下面的代码都不需要引号,你看看- @echo off
- setlocal enabledelayedexpansion
- set var=haha,haha1,haha2
- for %%i in (%var%) do (@rem 只要变量“var”中,有一个完全匹配“haha”的,就跳转。
- if %%i==haha (echo haha&pause&goto :eof)
- echo %%i
- )
- pause
复制代码
- @echo off
- setlocal enabledelayedexpansion
- set var=haha,haha1,haha2
- for %%i in (%var%) do (@rem 只有变量“var”的整个值完全匹配“haha”时,就跳转。
- set a=!var:,=!&if !a!==%%i if %%i==haha (echo haha&pause&goto :eof)
- echo %%i
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |