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

[文本处理] 批处理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% 不可以达到效果,显示内容为一个%

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

TOP

楼主说的是变量的嵌套么,可以 echo !%%a!或者call echo %%%%a%%,需要提醒的是用第一种要先加上一行setlocal enabledelayedexpansion

TOP

把那几行echo中的Var改成%%a就行了

TOP

5# zm900612


非常感谢#5的回复。
我的想法是这样的,第二个for中的形式变量%%a所指代的每一个元素实际是一个变量名,我想在这个for中获取%%a所指向的元素的变量值。。。
晕,绕晕了。。

TOP

本帖最后由 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都可以考虑

TOP

主题帖更新,不知我的意思有没有说明白,望点化。
以前好像看到过相关方法,找不到了。。。。

TOP

2# 冷玉公子


建议有时间看看这个:
批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/thread-2899-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 冷玉公子 于 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

TOP

返回列表