[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 36# CrLf
是set/a 1!t2:~3,2!-1!t1:~3,2!,加前缀1?
另外我看到大师 2013年的 关于批处理计算圆周率的三个方案.我发现了一个收敛速度快1000倍的公式,这样就实现了计算圆周率的模块化。可以直接计算第n位,
pi=2*1+2*1!/3!!+2*2!/5!!+2*3!/7!!+...+2*k!/(2*k+1)!!+...这个公式的收敛速度只有2,而且分母不是2。需要分母是2的次幂的公式,这样除以2的次幂就相当于移位>>

TOP

回复 35# happy886rr


    不用截取,两部分抵消了

TOP

回复 34# sishentibu
批处理遇到0开头的就当八进制处理了,遇到0x开头的就16进制计算了,计算时间差这块需要加个100就行了,然后截取。

TOP

回复 33# happy886rr
没懂。。可以帮我举个例子吗,就用楼上你写的代码

刚才写的时候又碰到个问题。关于时间的处理的。
手动设置t1,t2时间,然后用下面代码是可以的
  1. set /a t=(%t2:~0,2%-%t1:~0,2%)*60+(%t2:~3,2%-%t1:~3,2%)
复制代码
但我在for /f 语句中,读取到时间,对时间进行计算就变成一闪而过了,这个哪里有问题?
  1. set /a t=(!t2:~0,2!-!t1:~0,2!)*60+(!t2:~3,2!-!t1:~3,2!)
复制代码

TOP

回复 32# sishentibu
这个好办。用token findstr /n,截取bat文件。然后将行号和pause都echo到bat文件的每一行下,就是你写个批处理给你要测试的bat添加pause和行号,方便你查错。

TOP

回复 31# happy886rr


    你研究的可够多的
批处理按行处理,这个我在论坛的基础教程里面有看到过的。
而且,我现在处理的东西都比较小,所以对于效率这块不是很注意。虽然我看到很多说goto的效率低,但我个人感觉,写成goto的形式,对于分类处理的东西更好写。。
另外,批处理有没有类似按行运行的办法的?因为我不是很熟悉,经常要把批处理改很多次才能达到最终要求。试过加pause,但行数一多就感觉好麻烦。而且有时碰到一闪而过的,更不好判断哪里的问题了

TOP

回复 30# sishentibu
set a=%%i这个必须有。
我发现for和if比goto运行的速度快很多,所以我那个分割可以写成for的,速度简直快了几十倍,还有批处理居然按行读取硬盘的bat文件,因此我把for循环弄成一行,让机器一次读完一个for语句。我设置为1000次循环,即最大3000位数字截取,运行速度快的惊人。
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p num=输入数字:
  3. for /l %%i in (1 1 1000) do (if !num! equ 0 (set p1=!p1:-,=-!&set /p =!p1:~1!) else (set p1=,!num:~-3!!p1!&set num=!num:~0,-3!))
复制代码
另外我发现用for /l这个可以加快计算圆周率和开平方的速度.

TOP

回复 28# happy886rr


    29#的CrLf貌似提出异议了。不过我看的有点晕,暂时不去研究那个了
关于截断,我还有个问题请教下
例如
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ("123465") do (
  4. echo %%i
  5. set a=%%i
  6. echo !a:~0,2!)
  7. pause
复制代码
这个可以不可以没有set a=%%i 这一步的?我自己试不出来。

TOP

回复 28# happy886rr


    不会有歧义的,过滤等号和*一直是个老大难问题(摊手)...详见:
http://www.bathome.net/viewthread.php?tid=6038

TOP

回复 27# sishentibu
这好像就是个漏洞,不管转不转义,!str: ==!,里边只要遇到第一个等号就工作。微软就这么设计的。

TOP

回复 26# happy886rr

好吧。
那是不是加了^, 就是我们所需要的那个赋值符号?
但一般来说,用^转义了后,不是普通的一个字符吗

TOP

回复 25# sishentibu
有时候会有用比如你要过滤等号!str:=-=!就会歧义

TOP

回复 24# happy886rr
Set str=%str=-% 类似这种,不是set的本来用法吗,你这种写法我反而没看懂。。
也就是说,从结果来说,加不加^都可以的吧?

TOP

本帖最后由 happy886rr 于 2016-3-11 22:03 编辑

回复 23# sishentibu
因为setlocal开启变量延迟,所以p1不用定义。直接拿来用。
set p1=!p1:-,^=-! 一行里出现两个等号,怕歧义,所以加个^让机器好理解

TOP

回复 22# happy886rr

我又有疑问了。。
第一遍执行的时候,set p1=,!num:~-3!!p1! ,p1不是还没有定义吗,难道后方的那个p1直接为空?
上面的还能解释的话,set p1=!p1:-,^=-! 就有些不太明白了。一般情况下,不是!p1:-,=-! 吗?为什么会多了个^,这个不是转义用的吗?
我去掉^的情况下,批处理还是正常运行了。。然后按我的理解,!p1:-,^=-!不是语法不对吗。。。

TOP

返回列表