找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25331|回复: 8

批处理在数字前面补零的if语句出错了?

[复制链接]
发表于 2011-11-13 18:44:43 | 显示全部楼层 |阅读模式

  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?
发表于 2011-11-13 19:19:55 | 显示全部楼层
一.   if命令大小判断时不需要带引号
二.   set /a命令计算时如遇0开头时默认为八进制计算
lz为什么不直接echo 0%c%而要多此一举的付一次值呢
发表于 2011-11-13 19:21:35 | 显示全部楼层
汗,你知道 if "%c%" LSS "10" 进行的是神马比较吗...
 楼主| 发表于 2011-11-14 12:25:33 | 显示全部楼层
回复 2# 601997526
1:“”一说还真是大小判断不关空格字符的事情
2:我需要把01 02 -09搞成变量用!而不是单纯的显示!有办法么!
发表于 2011-11-14 12:44:34 | 显示全部楼层
  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
复制代码
发表于 2011-11-14 12:46:13 | 显示全部楼层
  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
复制代码
发表于 2011-11-14 16:42:53 | 显示全部楼层
提这么几点,希望对楼主有所帮助:
经过set/a "计算"赋值后,结果总是以十进制数表示,不会有前置0
o开头后跟数字认为是8进制数,则08和09非法,而 07 及以下的合法且与十进制数值相等(所以8进制数码想转成10进制数只需用set/a赋值 一下就行了)
if 之后带引号的比较是当字符比较,则 "2" gtr "10" 而不带引号时 2 lss 10 所以是否采用引号是根据需要决定的
呵呵,我看到 CrLf  版主对 if 的新贴了,有时间我再去慢慢学习去
发表于 2011-11-14 19:57:34 | 显示全部楼层
呵呵,看来要恭喜一下LZ了,犯了个典型错误
发表于 2011-11-15 10:09:58 | 显示全部楼层
回复 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:55 , Processed in 0.019487 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表