Board logo

标题: [其他] 批处理怎么在for循环中输出%%~变量名 [打印本页]

作者: fish    时间: 2010-8-4 04:15     标题: 批处理怎么在for循环中输出%%~变量名

代码如下:
  1. @echo off
  2. for %%a in (1,2) do echo %%%%~a
  3. pause
复制代码
理想输出:
%%~a
%%~a
实际输出:
%1
%2
作者: sgaizxt001    时间: 2010-8-4 05:53

这个?
  1. @echo off
  2. for /l %%i in (1,1,2) do echo %%%%~a
  3. pause
复制代码

设定循环次数一般是用for /l来控制。这里你的意思%%~a是一个字符串,只单纯的输出吗?

[ 本帖最后由 sgaizxt001 于 2010-8-4 05:55 编辑 ]
作者: wankoilz    时间: 2010-8-4 08:22

  1. @echo off&setlocal enabledelayedexpansion
  2. set x=~
  3. for %%a in (1,2) do echo %%%%!x!a
  4. pause
复制代码

要达到楼主目的,不要让%%和"变量名"或"~变量名"挨一起了,这样就不会被识别成变量。
!x!优先级比%%a型变量低,cmd首先寻找%%a型变量,发现是%%!x!a,不予替换值,然后替换!x!得到~。

[ 本帖最后由 wankoilz 于 2010-8-4 08:33 编辑 ]
作者: FOR    时间: 2010-8-4 11:16

这个只要不和前面的%%a重复就可以了,何必那么麻烦
for %%b in (c,d) do echo %%%%~a
作者: wankoilz    时间: 2010-8-4 12:29

原帖由 FOR 于 2010-8-4 11:16 发表
这个只要不和前面的%%a重复就可以了,何必那么麻烦
for %%b in (c,d) do echo %%%%~a

楼主说是显示“%%~变量名”,楼上的%%~a在for里面不是变量名。
我开始也犯了和楼上相同的错误。
作者: FOR    时间: 2010-8-4 14:29     标题: 回复 5楼 的帖子

如果真是这样的话,感觉是没事找事
  1. @echo off
  2. for %%a in (1,2) do (
  3.    set /p=%%%%<nul
  4.    echo ~a
  5. )
  6. pause
复制代码
  1. @echo off
  2. for %%a in (1,2) do (
  3.    set /p=%%%% ~a<nul
  4.    echo;
  5. )
  6. pause
复制代码

[ 本帖最后由 FOR 于 2010-8-4 14:32 编辑 ]
作者: fish    时间: 2010-8-4 16:22     标题: 回复 6楼 的帖子

FOR前辈能否讲解一下这个代码?
  1. @echo off
  2. for %%a in (1,2) do (
  3.    set /p=%%%% ~a<nul
  4.    echo;
  5. )
  6. pause
复制代码





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