Board logo

标题: [文本处理] 批处理for循环中的%%a为变量名时,如何获取其值? [打印本页]

作者: 0428_hai    时间: 2011-4-25 19:57     标题: 批处理for循环中的%%a为变量名时,如何获取其值?

  1. for /f %%a in (a.txt) do (
  2.   ::a.txt文本中的内容为变量名,想在这儿引用这个变量,如何写代码?
  3.   ::echo %%%a%,这样写不对。
  4. )
复制代码

2011-4-25 22:03:54更新问题如下:
  1. @echo off
  2. SETLOCAL ENABLEDELAYEDEXPANSION
  3. ::------------以下代码生成测试用的文本文件test.txt-------
  4. >test.txt echo my
  5. >>test.txt echo name
  6. >>test.txt echo is jack
  7. >>test.txt echo 批处理 论坛
  8. >>test.txt echo bbs.bathome.cn
  9. ::------------以上代码用于生成测试用的文本文件test.txt-------
  10. for /f "delims=" %%a in (test.txt) do (
  11.   set /a n+=1
  12.   set !n!=%%a
  13. )
  14. for /l %%a in (1,1,%n%) do (
  15.   echo !%%a!
  16. )
  17. pause>nul
复制代码
在以上代码中,我将test.txt文本中的每一行内容存入一系列变量中,这些变量名从1开始依次排列。
第二个for循环我使用了变量延迟来获取了这些变量名并读取了变量值。
我想,有没有办法不使用变量延迟来达到这个效果,不使用变量延迟如何在第二个for循环中读取test.txt中的内容呢?
使用 echo %%%a% 不可以达到效果,显示内容为一个%
作者: 冷玉公子    时间: 2011-4-25 20:10

本帖最后由 冷玉公子 于 2011-4-25 20:11 编辑

第一种方法 直接调用
  1. @echo off
  2. for /f %%a in (a.txt) do echo %%a
  3. pause
复制代码
第二种方法 调用变量
  1. @echo off
  2. for /f %%a in (a.txt) do (
  3.   Set "Var=%%a"
  4.   Call Echo !Var!
  5. pause
复制代码
建议有时间去看看这个
批处理for语句从入门到精通
http://bbs.bathome.net/thread-2189-1-1.html
作者: Batcher    时间: 2011-4-25 20:20

2# 冷玉公子


建议有时间看看这个:
批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/thread-2899-1-1.html
作者: 0428_hai    时间: 2011-4-25 22:10

主题帖更新,不知我的意思有没有说明白,望点化。
以前好像看到过相关方法,找不到了。。。。
作者: CrLf    时间: 2011-4-25 22:21

本帖最后由 zm900612 于 2011-4-25 22:27 编辑

在for中读取变量的办法有n种:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%a in (a.txt) do (
  3.   Set "Var=%%a"
  4.   Echo !Var!
  5. pause
复制代码
  1. @echo off
  2. for /f %%a in (a.txt) do (
  3.   Set "Var=%%a"
  4.   Call Echo %%Var%%
  5. pause
复制代码
  1. @echo off
  2. for /f %%a in (a.txt) do (
  3.   Set "Var=%%a"
  4.   cmd /v:on Echo !Var!
  5. pause
复制代码
  1. @echo off
  2. for /f %%a in (a.txt) do (
  3.   Set "Var=%%a"
  4.   cmd /c Echo %%Var%%
  5. pause
复制代码
  1. @echo off
  2. for /f %%a in (a.txt) do (
  3.   Set "Var=%%a"
  4.   for /f "tokens=1* delims==" %%b in ('set Var') do echo %%c
  5. pause
复制代码
如果只需要显示,不需要做别的工作,那能不定义变量就尽量别定义:
  1. type a.txt
复制代码
  1. more a.txt
复制代码
  1. find /v "" a.txt
复制代码
  1. findstr .* a.txt
复制代码
  1. copy a.txt con
复制代码
  1. sort /+100000 a.txt
复制代码
  1. @echo off
  2. for /f %%a in (a.txt) do echo %%a
  3. pause
复制代码
甚至fc都可以考虑
作者: 0428_hai    时间: 2011-4-25 22:30

5# zm900612


非常感谢#5的回复。
我的想法是这样的,第二个for中的形式变量%%a所指代的每一个元素实际是一个变量名,我想在这个for中获取%%a所指向的元素的变量值。。。
晕,绕晕了。。
作者: CrLf    时间: 2011-4-25 22:39

把那几行echo中的Var改成%%a就行了
作者: wankoilz    时间: 2011-4-26 09:24

楼主说的是变量的嵌套么,可以 echo !%%a!或者call echo %%%%a%%,需要提醒的是用第一种要先加上一行setlocal enabledelayedexpansion
作者: 0428_hai    时间: 2011-4-26 17:03

#8
所言极是,我已经试出来了。




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