【问题标题】:SET command expantion substringsSET 命令扩展子字符串
【发布时间】:2014-09-19 17:29:48
【问题描述】:

在命令提示符下使用 SET 命令时,% 和 !意思是,例如

set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%

注意 %i 和 !VAR!这是什么意思,%i 不能是一个变量,对吧?因为变量像 %variable% 一样写出来。

任何想法这些是什么? (*) 也只是文字吗?

问候,S

【问题讨论】:

    标签: windows batch-file command set prompt


    【解决方案1】:

    在正常情况下,您可以通过用 % 将变量名括起来来访问变量值:

    set var=a
    echo %var%
    

    当有&的命令组合或者一些命令放在括号中时,set将在所有命令执行后生效。然后你need delayed expansion to access your variable并用!括起来

    setlocal enableDelayedExpansion
    if exist c:\ (
      set var2=a
      echo !var2!
    
    )
    

    仔细查看SET 命令。

    在 for 循环中,您有一个仅在 for 命令上下文中有效的特殊变量 - 一个在循环的每次迭代中更改其值的标记:

    for /f "delims=" %%# in ('set') do echo %%# 
    

    here are the letters that you can use as tokens。请注意 - 您需要在脚本中使用双 %,在命令提示符中使用单。

    还有另一种类型的变量仅在开头有 % - 传递给脚本(或子例程)的参数 - 可通过数字(或更确切地说是数字)访问 - 从 %0%9 其中@ 987654336@ 是脚本本身的名称。

    【讨论】:

    • 那个 ss64.com 链接不准确。还有更多的字符可以用作 FOR 变量。见stackoverflow.com/a/8520993/1012053
    • @dbenham - 刚刚也看了一下这个tokens=3* will cause the 3rd and all subsequent items on each line to be processed ,这也不正确......应该写信给西蒙。
    • start、step 或 end 有什么作用?例如: FOR /L %%parameter IN (start,step,end) DO 命令
    • @snipe - 这种FOR 的使用方式最接近普通的编程语言FOR 循环。start%%parameter 的第一个值step 是与前一个值相加的总和end 是..结束。当循环到达结束的值时它停止。
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多