Board logo

标题: [文件操作] 批处理set变量取得for变量并补位为什么要在%%a后补0? [打印本页]

作者: sgaizxt001    时间: 2010-1-24 18:17     标题: 批处理set变量取得for变量并补位为什么要在%%a后补0?

想做batman的题目,但是遇到了如题所诉困难,请指点一下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2 delims= " %%a in (b.txt) do (
  4.                               set var=%%a000
  5.                               set var=!var:~0,7!
  6.                               echo %%a %%b !var!
  7.                  )
  8. pause
复制代码
因为无法补位,大小判断就失去了意义,杯具
看了2楼的帖子,在%%a变量后补了000,目的就达到了,为什么要补0?

[ 本帖最后由 sgaizxt001 于 2010-1-24 18:21 编辑 ]
作者: Batcher    时间: 2010-1-24 18:24

在不补零的前提下,你准备用哪种思路去解题?
作者: sgaizxt001    时间: 2010-1-24 18:44

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=-  tokens=1,2,3" %%i in (a.txt) do (
  4.                            for /f "tokens=1,2 delims= " %%a in (b.txt) do (
  5.                               set var=%%a000
  6.                               set var=!var:~0,7!
  7.                               if !var! lss %%i   if !var! gtr %%j  if %%b neq %%k echo %%a %%b >>c.txt                                                                                 )
  8.                                                  )
复制代码
虽然没得出正确结果,但我的解题就是这样

[ 本帖最后由 sgaizxt001 于 2010-1-24 18:53 编辑 ]
作者: sgaizxt001    时间: 2010-1-24 18:47

还是无法得出正确结果,少了淦田,并且记录好像比你的多,我再修改看看
查看c.txt后,分析结果得出:
1。大小比较输出结果循环了4次,多了3个结果
2。b.txt里的记录淦田在a.txt里没有,所以for循环没有比较这个记录,所以就没有输出。
但是为什么呢?对于我这个新学bat的来说,实在是无法解决,请指教一下啊

[ 本帖最后由 sgaizxt001 于 2010-1-24 19:10 编辑 ]
作者: wxcute    时间: 2010-1-24 21:50

假设一个桶甲中有油和水,而另一个桶乙中只有油;如果硬要取出乙中的水与甲比较哪个多不是行不通吗。(因为乙中没水)

输出结果重复说明本该只比较一次的实际却比较了多次,原因应该是循环的内外层次颠倒了。




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