Board logo

标题: 批处理在数字前面补零的if语句出错了? [打印本页]

作者: jellyhk    时间: 2011-11-13 18:44     标题: 批处理在数字前面补零的if语句出错了?

  1. @echo off
  2. set /p c=
  3. if "%c%" == "01" set c=0
  4. :lop
  5. set /a c+=1
  6. if "%c%" LSS "10" set c=0%c%
  7. echo %c%
  8. pause
  9. 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

  1. @echo off
  2. set n=1
  3. :loop
  4. if %n% lss 10 (
  5.     echo 0%n%
  6. ) else (
  7.     echo %n%
  8. )
  9. pause
  10. set /a n+=1
  11. goto :loop
复制代码

作者: awk    时间: 2011-11-14 12:46

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (101,1,111) do (
  4.     set n=%%a
  5.     echo !n:~-2!
  6. )
  7. 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搞成变量用,这还不简单,只须要小小的修改一下就可以了
  1. @echo off
  2. set /p c=
  3. if "%c%" == "01" set c=0
  4. :lop
  5. set /a c+=1
  6. if %c% LSS 10 (set a=0%c%) else (set a=%c%)
  7. echo %a%
  8. pause
  9. goto lop
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2