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

[数值计算] [已解决]变量延迟扩展如何应用到这个批处理中?

这是前面一个人出的题:[已解决]批处理怎样把文本每行增加上3行下3行内容?(http://www.bathome.net/thread-7632-1-2.html)。寒夜孤星师父让我写一个出来,我就写了这个代码,但是运行后不能得到结果,我怀疑是我没整对变量延迟扩展,也怀疑是代码的问题。但是水平有限,无法查错,请大家帮我分析分析。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (1,1,9) do (
  4.   set str=123456789
  5.   set /a n+=1
  6.                                      )
  7. for /l %%a in (1,1,9) do (
  8.   set num=%%a
  9.   for %%i in (n-3,n-2,n-1,n+1,n+2,n+3) do (
  10.     set /a stt=%%i
  11.     if !stt! geq 9 set /a stt=stt%%9
  12.     if !num! gtr 1 set /a stt=stt+num-1
  13.     call echo %%num%%,%%str:~!stt!,1%% !stt!
  14.                                           )
  15.                          )
  16. pause
复制代码
为了查看方便,call echo %%num%%,%%str:~!stt!,1%% !stt!这里的空格是tab。

[ 本帖最后由 sgaizxt001 于 2010-4-23 02:21 编辑 ]

楼主真是有才啊,用一个全角括弧来考我们?
http://bbs.bathome.net/thread-7690-1-1.html
只给出一段有问题的代码,对代码意图只字不提。
先仔细看看上面的链接吧
技术问题请到论坛发帖求助!

TOP

变量延迟没问题
两句 if 前后位置搞错了
事实上 if !num! gtr 1 set /a stt=stt+num-1 此句的if 是多余的,直接 set /a  就好了。
第一句 set str=123456789 没必要放在for里面
call 那句可用for 来中转变量,以提高效率。同时还可省略 num 变量,直接 %%a 就ok了。
给你精简一下
  1. @echo off&setlocal enabledelayedexpansion
  2. set str=123456789
  3. for /l %%i in (1,1,9) do set /a n+=1
  4. for /l %%a in (1,1,9) do (
  5.   for %%i in (n-3,n-2,n-1,n+1,n+2,n+3) do (
  6.     set /a stt=%%i+%%a-1
  7.     if !stt! geq 9 set /a stt=stt%%9
  8.     for %%j in (!stt!) do echo %%a !str:~%%j,1! !stt!
  9.    )
  10. )
  11. pause
复制代码






.

[ 本帖最后由 随风 于 2010-4-22 11:17 编辑 ]
技术问题请到论坛发帖求助!

TOP

回复 1楼 的帖子

1,俺不是师傅.....因为俺不是唐僧
2,不明白楼主为什么一定要通过截取来实现呢?1到9这个数列只是个举例,那么1到20又该怎么办呢?1到100呢?
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复寒夜孤星

我的方法是笨,不过既然写了不能运行就想知道是哪出错了。就像你跟我说的一样,要看的懂别人的代码也要复习自己的代码。
如果是1到100的话,这个就没办法了。截不了字符了

[ 本帖最后由 sgaizxt001 于 2010-4-23 02:39 编辑 ]

TOP

返回列表