标题: 批处理在数字前面补零的if语句出错了? [打印本页]
作者: jellyhk 时间: 2011-11-13 18:44 标题: 批处理在数字前面补零的if语句出错了?
- @echo off
- set /p c=
- if "%c%" == "01" set c=0
- :lop
- set /a c+=1
- if "%c%" LSS "10" set c=0%c%
- echo %c%
- pause
- goto lop
复制代码
我想显示
01
02
03
04
05
06
07
08
09
10
11
...后面就不管了!
---------------------------
为什么if里的set c=0%c%是成功的显示出来的还是单个2 3 4 5?
作者: 601997526 时间: 2011-11-13 19:19
一. if命令大小判断时不需要带引号
二. set /a命令计算时如遇0开头时默认为八进制计算
lz为什么不直接echo 0%c%而要多此一举的付一次值呢
作者: CrLf 时间: 2011-11-13 19:21
汗,你知道 if "%c%" LSS "10" 进行的是神马比较吗...
作者: jellyhk 时间: 2011-11-14 12:25
回复 2# 601997526
1:“”一说还真是大小判断不关空格字符的事情
2:我需要把01 02 -09搞成变量用!而不是单纯的显示!有办法么!
作者: awk 时间: 2011-11-14 12:44
- @echo off
- set n=1
- :loop
- if %n% lss 10 (
- echo 0%n%
- ) else (
- echo %n%
- )
- pause
- set /a n+=1
- goto :loop
复制代码
作者: awk 时间: 2011-11-14 12:46
- @echo off
- setlocal enabledelayedexpansion
- for /l %%a in (101,1,111) do (
- set n=%%a
- echo !n:~-2!
- )
- pause
复制代码
作者: yyykkkyyyy 时间: 2011-11-14 16:42
提这么几点,希望对楼主有所帮助:
经过set/a "计算"赋值后,结果总是以十进制数表示,不会有前置0
o开头后跟数字认为是8进制数,则08和09非法,而 07 及以下的合法且与十进制数值相等(所以8进制数码想转成10进制数只需用set/a赋值 一下就行了)
if 之后带引号的比较是当字符比较,则 "2" gtr "10" 而不带引号时 2 lss 10 所以是否采用引号是根据需要决定的
呵呵,我看到 CrLf 版主对 if 的新贴了,有时间我再去慢慢学习去
作者: wc726842270 时间: 2011-11-14 19:57
呵呵,看来要恭喜一下LZ了,犯了个典型错误
作者: 601997526 时间: 2011-11-15 10:09
回复 4# jellyhk
LZ想要把01 02 -09搞成变量用,这还不简单,只须要小小的修改一下就可以了- @echo off
- set /p c=
- if "%c%" == "01" set c=0
- :lop
- set /a c+=1
- if %c% LSS 10 (set a=0%c%) else (set a=%c%)
- echo %a%
- pause
- goto lop
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |