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

批处理在数字前面补零的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?
本人已死!不用联系!~
要联系下来联系!~~

一.   if命令大小判断时不需要带引号
二.   set /a命令计算时如遇0开头时默认为八进制计算
lz为什么不直接echo 0%c%而要多此一举的付一次值呢

TOP

汗,你知道 if "%c%" LSS "10" 进行的是神马比较吗...

TOP

回复 2# 601997526
1:“”一说还真是大小判断不关空格字符的事情
2:我需要把01 02 -09搞成变量用!而不是单纯的显示!有办法么!
本人已死!不用联系!~
要联系下来联系!~~

TOP

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

TOP

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

TOP

提这么几点,希望对楼主有所帮助:
经过set/a "计算"赋值后,结果总是以十进制数表示,不会有前置0
o开头后跟数字认为是8进制数,则08和09非法,而 07 及以下的合法且与十进制数值相等(所以8进制数码想转成10进制数只需用set/a赋值 一下就行了)
if 之后带引号的比较是当字符比较,则 "2" gtr "10" 而不带引号时 2 lss 10 所以是否采用引号是根据需要决定的
呵呵,我看到 CrLf  版主对 if 的新贴了,有时间我再去慢慢学习去

TOP

呵呵,看来要恭喜一下LZ了,犯了个典型错误
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

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

TOP

返回列表