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

[数值计算] 批处理如何将0010变成10?

[复制链接]
发表于 2011-6-16 13:23:57 | 显示全部楼层 |阅读模式
我本来是想将0001,,0002,0003...0010...1010...等用批处理for变成1,2,3...10...1010怎么写代码啊?
 楼主| 发表于 2011-6-16 13:24:55 | 显示全部楼层
这些是文件夹名就是:
for /d %%a in (*) do (
代码
)
 楼主| 发表于 2011-6-16 13:29:49 | 显示全部楼层
我想了好久了!用set n=%m:0=%又会把0010变成了1
用for /f "delims=123456789 tokens=1,*"又会把0010变成了0
哎!!!求教啊!!!sos!!!
发表于 2011-6-16 13:32:59 | 显示全部楼层
10001-10000=1
10010-10000=10
发表于 2011-6-16 13:36:05 | 显示全部楼层
  1. for /f "delims=0 tokens=*" %%a in ("0010")do echo %%a
复制代码
发表于 2011-6-16 13:39:50 | 显示全部楼层
常用的delims法:
  1. for /f "tokens=*delims=0" %%a in ("0010") do echo %%a
复制代码
处理固定位数的数字时的方法:
  1. set str=0010
  2. set /a n=1%str%-10000
  3. ::改进算法后可以兼容大数,但是代码太冗长,不实用
复制代码
当数值于十的时候可以:
  1. set str=0010
  2. set /a n=0x%str%
  3. ::改进算法后同样可以兼容大数,但是代码太冗长,不实用
复制代码
for /l+if:
  1. set str=0010
  2. for /l %%a in (0 1 10) do if "!str:~%%a,1!" gtr "0" echo;!str:~%%a!
复制代码
发表于 2011-6-16 13:41:28 | 显示全部楼层

  1. @echo off
  2. for /f "tokens=* delims=0" %%i in (d.txt) do echo %%i
复制代码
发表于 2011-6-16 13:49:00 | 显示全部楼层
来个低效的
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p c=请输入数字
  3. set n=%c%
  4. for /l %%a in (1 1 9) do set n=!n:%%a=0!
  5. set /a c=1%c%-1%n%
  6. echo %c%
复制代码
 楼主| 发表于 2011-6-16 14:01:11 | 显示全部楼层
我对这里的
for /f "tokens=* delims=0" %%i in (d.txt) do echo %%i
表示不理解。像0010由于tokens=*为什么会有这样的效果表示不理解
我看过站里的那个《for入门到精通》里面没有直接在tokens加 * 号的
能详细讲解一下tokens=*吗
发表于 2011-6-16 14:11:52 | 显示全部楼层
tokens=*会将参数设为从第一个非分隔符字符开始的其后所有字符串,所以当分隔符为0时,tokens=*能去除字符串头部的所有0(如果存在的话)
发表于 2011-6-16 14:55:03 | 显示全部楼层
本帖最后由 523066680 于 2011-6-16 14:56 编辑
  1. @echo off
  2. set n=00010
  3. set str=#%n%
  4. set str=%str:#000=%
  5. set str=%str:#00=%
  6. set str=%str:#0=%
  7. echo %str:#=%
  8. pause
复制代码
如果用pl的话s/^0+//; 快一点
发表于 2011-6-16 17:31:53 | 显示全部楼层
本帖最后由 tmplinshi 于 2011-6-16 17:51 编辑

tokens=* 表示剩余部分。

“分隔符”是不要的字符,用来把字符串分成多块。

例 1

    for /f "delims=0 tokens=*" %%i in ("0001020304") do ...

    则:
        %%i=1020304

例 2

    for /f "delims=0 tokens=2,*" %%i in ("0001020304") do ...

    则:
        %%i=2
        %%j=304
发表于 2011-6-16 17:56:57 | 显示全部楼层
你们都把问题复杂化了!

set  /a a=0001
set /a b="0011"
set a
set b
发表于 2011-6-16 17:58:46 | 显示全部楼层
你们都把问题复杂化了!

set  /a a=0001
set /a b="0011"
set a
set b
applba 发表于 2011-6-16 17:56

假如...
set /a a = 00009
发表于 2011-6-16 18:04:00 | 显示全部楼层
14# tmplinshi

看来无解了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 18:37 , Processed in 0.022221 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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