用于设置变量的命令不起作用

时间:2013-11-24 03:37:50

标签: variables batch-file for-loop

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

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命令停止。那么如何将=更改为连字符?

3 个答案:

答案 0 :(得分: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 . . .

答案 1 :(得分:0)

简易解决方案:

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

那应该为你做好自己的工作。但它只能在引用中使用一个-

答案 2 :(得分:0)

SET会将第一个=右侧的值指定给左侧的环境变量。

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

您可以通过执行

来验证这一点
set harr

将显示以harr

开头的任何变量