【问题标题】:for command to set a variable does not workfor 命令设置变量不起作用
【发布时间】:2013-11-24 03:37:49
【问题描述】:

我正在运行这个命令,但我不明白为什么它不起作用

setlocal EnableDelayedExpansion

for %%a in (harry-boy) do set %%a:-==

echo %harry%

pause

这就是我得到的结果 -

e:\6\1>setlocal EnableDelayedExpansion

e:\6\1>for %a in (harry-boy) do set %a:-==

e:\6\1>set harry-boy:-==

e:\6\1>echo
ECHO is on.

e:\6\1>pause
Press any key to continue . . .

我将连字符更改为等号,然后对其运行 set 命令。我希望看到变量“harry”=“boy”??

这是一个简单的测试 -

set file=play=here.mkv
set %file:==-%
echo %file%
pause

我明白了 -

set file=play=here.mkv
==-%
 was unexpected at this time.

set %file:==-%

我以为我会得到 file = play-here.mkv 的新内容。好的,我看到这使语法错误并且 set 命令停止。那么如何将 = 更改为连字符呢?

【问题讨论】:

  • 你的set命令语法错误,不能这样使用循环变量名。它必须是一个变量名。
  • 您已添加更多信息 - 替换功能无法替换 = 符号。

标签: variables batch-file for-loop


【解决方案1】:

字符串替换格式:

%var:old-string=new-string%

不适用于for 可替换参数,仅在批处理变量中。您的示例使用变量的等效方法是:

set a=harry-boy
set %a:-==%
echo %harry%
pause

输出:

C:>set a=harry-boy
C:>set harry=boy
C:>echo boy
boy
C:>pause
Press any key to continue . . .

【讨论】:

  • 是的,这很有意义。我正在尝试一些基本的东西,比如你的测试,但我看不到盯着它的错误。看看我原来的帖子。
【解决方案2】:

简单的解决方案:

for /f "tokens=1,2 delims=-" %%a in ("harry-boy") do set %%a=%%b
Echo %harry%

这应该为您完成您的工作。但它只适用于引用中的一个-

【讨论】:

  • 如果你写tokens=1,*而不是tokens=1,2,它将与更多-一起工作(%%b将是一个包含该行其余部分的字符串)
【解决方案3】:

SET 会将第一个 = 右侧的值分配给左侧命名的环境变量。

因此,在这两种情况下,您都会将值 = 分配给名为 harry-boy:- 的变量。

您可以通过执行来验证这一点

set harr

这将显示以harr 开头的任何变量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2017-10-26
    • 2018-02-01
    • 2013-08-02
    相关资源
    最近更新 更多