Board logo

标题: [数值计算] 批处理如何将0010变成10? [打印本页]

作者: BS0小陈    时间: 2011-6-16 13:23     标题: 批处理如何将0010变成10?

我本来是想将0001,,0002,0003...0010...1010...等用批处理for变成1,2,3...10...1010怎么写代码啊?
作者: BS0小陈    时间: 2011-6-16 13:24

这些是文件夹名就是:
for /d %%a in (*) do (
代码
)
作者: BS0小陈    时间: 2011-6-16 13:29

我想了好久了!用set n=%m:0=%又会把0010变成了1
用for /f "delims=123456789 tokens=1,*"又会把0010变成了0
哎!!!求教啊!!!sos!!!
作者: plp626    时间: 2011-6-16 13:32

10001-10000=1
10010-10000=10
作者: plp626    时间: 2011-6-16 13:36

  1. for /f "delims=0 tokens=*" %%a in ("0010")do echo %%a
复制代码

作者: CrLf    时间: 2011-6-16 13:39

常用的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!
复制代码

作者: lvsehuaxue    时间: 2011-6-16 13:41

  1. @echo off
  2. for /f "tokens=* delims=0" %%i in (d.txt) do echo %%i
复制代码

作者: CrLf    时间: 2011-6-16 13:49

来个低效的
  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%
复制代码

作者: BS0小陈    时间: 2011-6-16 14:01

我对这里的
for /f "tokens=* delims=0" %%i in (d.txt) do echo %%i
表示不理解。像0010由于tokens=*为什么会有这样的效果表示不理解
我看过站里的那个《for入门到精通》里面没有直接在tokens加 * 号的
能详细讲解一下tokens=*吗
作者: CrLf    时间: 2011-6-16 14:11

tokens=*会将参数设为从第一个非分隔符字符开始的其后所有字符串,所以当分隔符为0时,tokens=*能去除字符串头部的所有0(如果存在的话)
作者: 523066680    时间: 2011-6-16 14:55

本帖最后由 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+//; 快一点
作者: tmplinshi    时间: 2011-6-16 17:31

本帖最后由 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
作者: applba    时间: 2011-6-16 17:56

你们都把问题复杂化了!

set  /a a=0001
set /a b="0011"
set a
set b
作者: tmplinshi    时间: 2011-6-16 17:58

你们都把问题复杂化了!

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

假如...
set /a a = 00009
作者: applba    时间: 2011-6-16 18:04

14# tmplinshi

看来无解了
作者: BS0小陈    时间: 2011-6-16 20:52

谢谢!我懂了!




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