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


    唔,还是保存为0.bat,再省几个字节,不过看着更蛋疼了...
  1. @set/am+=n+=1,1/(n-101)2>nul&&0&echo %m%&pause
复制代码

TOP

楼上几种方案的微调
如果再精简的话
可以把nul改为#
不过那和%0改0一样具有限制
  1. @set/az+=i+=1,1/(100-i)2>nul&&%0&set,z&pause
复制代码
  1. @set/az+=i+=1
  2. @if %i% leq 99 %0
  3. @set,z&pause
复制代码
  1. @set/az+=i+=1
  2. @%0%i:~2%=2>nul||(set,z&pause)
复制代码
天的白色影子

TOP

回复 32# qzwqzw


    如此,貌似可再精简一下:
  1. @set/a.+=n+=1,1/(n-100)2>#&&0&set.&pause
复制代码

TOP

本帖最后由 qzwqzw 于 2012-12-23 17:54 编辑

如果不考虑任何隐含的限制条件
那么set.&pause也可以省略了
反正也没有限定一定要输出结果
而2>的使用也完全可以省略了
也因为题目没有限定要屏蔽错误
@在未限定屏蔽命令时也无必要
最后精简得到的代码结果如下:
  1. set/as+=i+=1,1/(i/100)||0
复制代码
还是给一个稍微正常点的精简
  1. @set/as+=i+=1,1/(i-101)2>nul&&%0||set/p=%s%
复制代码
上段代码会递减输出从0~100到0~0的累加结果
另外给一个递增输出从0~100到0~...的代码
  1. @set/as+=i+=1,1/(i/101)2>nul&&set/p=%s%||%0
复制代码
从代码的执行结果来看
&&与||联用的执行逻辑与我想象的还有些不同
它的执行条件受到了set/p的影响
如果set/p=%s%改成echo %s%结果会有不同
因为Echo会置%errorlevel%为0而set/p会置1
天的白色影子

TOP

本帖最后由 CrLf 于 2012-12-23 23:00 编辑

回复 34# qzwqzw


    set/p好办法,似乎调整次序可以再简化一个字节:
  1. @set/as+=i+=1/!!(i-100)2>nul||set/p=%s%&%0
复制代码
1

评分人数

TOP

本帖最后由 m891319 于 2012-12-23 19:32 编辑

回复 28# CrLf


    学习了m+=n+=1的方法

看了前面几位大大的思路
稍微总结了下简化代码的思考方向:
1. 利用%0等方式递规呼叫
2. 利用 && 或 || 简化判断流程
3. 目前看到递规的最简化 set/am+=n+=1 ,实在经典
4. 由于题目没有限定输出,后面的讨论都在于不拘泥于正式输出,
    以求更加精简代码

这是小弟领悟后的答案
  1. @set/%~n0%0
复制代码
得将档案储存为"am+=n+=1&setlocal enabledelayedexpansion&if !n!==100 (echo !m!&pause) else endlocal&"
不包含双引号,输出相当正式,也不会有递规产生
不过由于档名有字元限制,"set/" 实在是无法省略
算是有些投机取巧的方法...
1

评分人数

    • CrLf: 有新意!技术 + 1
Rick

TOP

回复 36# m891319


    申明下,批处理中的此类写法首见于:http://bbs.bathome.net/viewthread.php?tid=12689

TOP

返回列表