我正在运行此命令,我不明白为什么它不起作用
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命令停止。那么如何将=更改为连字符?
答案 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