Board logo

标题: 批处理有没有办法能够让变量来作为变量名? [打印本页]

作者: lj84831253    时间: 2010-5-14 19:39     标题: 批处理有没有办法能够让变量来作为变量名?

例如1.txt里边写着一行文本:
84838985
要求读取1.txt的这一行文本,然后以''文本内容N‘'作为变量名。也就是:“84838985N”。然后让“84838985N”。自增1,再输出“84838985N”的值。
可以实现吗?
好,我简单点说吧!~这个真是难呵呵。麻烦大家了。比如有两个文本1.txt和2.txt。
1.txt的文本内容如下:
A
B
C
D
E
2.txt的文本内容如下:
****/2
####/3
++++/8
其中的*#+都代表不确定的数字。
要求输出内容如下:
A****
A####
A++++
B****
B####
B++++
C####
C++++
D++++
E++++
而且要按照这个顺序输出,换成别的顺序就不可以了。
就是分别用1.txt里边的行:A
B
C
D
E去匹配2.txt里边的*#+。
*#+被匹配的最多次数是他们各自“/”符号后面的数字值。你仔细看下规律就知道了。

[ 本帖最后由 lj84831253 于 2010-5-15 08:58 编辑 ]
作者: sgaizxt001    时间: 2010-5-14 19:49

可以,不过输出不是84838986N吗?
作者: namejm    时间: 2010-5-14 19:55

  楼主想要的结果只是把文本中的数值+1之后,再在后面添加一个字符N用于输出是吗?如果只是这样的话,就不用把事情弄得如此复杂。
作者: lj84831253    时间: 2010-5-14 20:15

原帖由 sgaizxt001 于 2010-5-14 19:49 发表
可以,不过输出不是84838986N吗?
输出的是以84838986N为变量名的变量值。
作者: lj84831253    时间: 2010-5-14 20:17

原帖由 namejm 于 2010-5-14 19:55 发表
  楼主想要的结果只是把文本中的数值+1之后,再在后面添加一个字符N用于输出是吗?如果只是这样的话,就不用把事情弄得如此复杂。
不是把文本中的数值+1,是把文本中的文本内容提取出来,然后以“文本内容+N”作为变量名。再使以“文本内容+N”作为变量名的变量的值加上1。呵呵。
作者: hanyeguxing    时间: 2010-5-14 21:33

以“内容N”为变量名,以“内容+1N”为值,如果只一行,则:
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p p=<1.txt&set/a q=p+1&set !p!N=!q!N
  3. echo.变量%p%N的值为!%p%N!&pause
复制代码
如果是多行,则:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (1.txt) do set/a a=%%i+1&set %%iN=!a!N&echo.变量%%iN的值为!%%iN!
  3. pause
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-14 21:45 编辑 ]
作者: lj84831253    时间: 2010-5-14 21:45

原帖由 hanyeguxing 于 2010-5-14 21:33 发表
以“内容N”为变量名,以“内容+1N”为值,如果只一行,则:@echo off&setlocal enabledelayedexpansion
set/p p=
老兄还是没有理解我的意思唉。。。这个好难形容呀,,等等我想想怎么形容仔细点。。。。崩溃。。。
作者: lj84831253    时间: 2010-5-14 21:47

原帖由 hanyeguxing 于 2010-5-14 21:33 发表
以“内容N”为变量名,以“内容+1N”为值,如果只一行,则:@echo off&setlocal enabledelayedexpansion
set/p p=
首先,不是输出“84838985N”,而是输出“84838985N”的值。就是以要求“84838985N”为变量名,让变量的值自增1。
作者: hanyeguxing    时间: 2010-5-14 21:54

什么是自动增1?要这样?
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (1.txt) do set/a a=a+1&set %%iN=!a!&echo.变量%%iN的值为!%%iN!
  3. pause
复制代码

作者: lj84831253    时间: 2010-5-14 21:58

下载附件的rar看下我的代码大侠们应该就能理解了吧!~不过我的代码是不正确的,就是不会修改呵呵。大侠们看看。
作者: lj84831253    时间: 2010-5-14 22:01

不知道刚才传的附件编码有没有错,,,马虎
作者: hanyeguxing    时间: 2010-5-14 22:04

你把你的意图完整的说明,整个过程是什么?
作者: lj84831253    时间: 2010-5-14 22:24

好,我简单点说吧!~这个真是难呵呵。麻烦你了。比如有两个文本1.txt和2.txt。
1.txt的文本内容如下:
A
B
C
D
E
2.txt的文本内容如下:
****/2
####/3
++++/8
其中的*#+都代表不确定的数字。
要求输出内容如下:
A****
A####
A++++
B****
B####
B++++
C####
C++++
D++++
E++++
而且要按照这个顺序输出,换成别的顺序就不可以了,

[ 本帖最后由 lj84831253 于 2010-5-14 22:26 编辑 ]
作者: hanyeguxing    时间: 2010-5-14 22:50

楼主没有说明怎么得到的这个结果?
例如为什么A、B输出了三次,而C输出两次,D、E只输出一次?
作者: Batcher    时间: 2010-5-15 00:21     标题: 回复 10楼 的帖子

为啥不直接贴代码呢?
作者: lj84831253    时间: 2010-5-15 07:50

原帖由 hanyeguxing 于 2010-5-14 22:50 发表
楼主没有说明怎么得到的这个结果?
例如为什么A、B输出了三次,而C输出两次,D、E只输出一次?
就是分别用1.txt里边的行:A
B
C
D
E去匹配2.txt里边的*#+。
*#+被匹配的最多次数是他们各自“/”符号后面的数字值。你仔细看下规律就知道了。
作者: sgaizxt001    时间: 2010-5-15 08:14

这代码对我来说有点挑战。你把你后面描述的更新到顶楼,别人一看就可以给你写代码,如果要翻完帖子才知道你的意图的话,没多少人帮你
作者: sgaizxt001    时间: 2010-5-15 08:27

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2 delims=:" %%m in ('findstr /n .* "a.txt"') do (
  4. for /f "tokens=1,2 delims=/" %%a in (b.txt) do (
  5.      if %%m leq %%b echo %%n%%a
  6. )
  7. )
  8. endlocal
  9. pause
复制代码
测试正确
刚开始我思路想错了,不过这个代码要求你的/后面的数不能是08或者09之类的,只能是10进制的数

[ 本帖最后由 sgaizxt001 于 2010-5-15 09:04 编辑 ]




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