Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 用于设置变量的命令无效_Variables_Batch File_For Loop - Fatal编程技术网

Variables 用于设置变量的命令无效

Variables 用于设置变量的命令无效,variables,batch-file,for-loop,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

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

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

轻松解决:

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

这应该是你的工作。但是它只对引号中的一个
-
起作用。

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

因此,在这两种情况下,您将为名为
harry boy:-
的变量赋值
=

您可以通过执行

set harr

它将显示从字符串替换格式开始的任何变量:

%var:old-string=new-string%
不适用于可替换参数的
,仅适用于批处理变量。对于您的示例,使用变量的等效方法是:

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 . . .

set命令中的语法错误,不能以这种方式使用循环变量名。它必须是一个变量名。您已经添加了更多信息-替换功能无法替换
=
符号。是的,这很有道理。我正在尝试一些基本的测试,例如您的测试,但我看不到出现错误。请查看我的原始帖子。如果您编写
tokens=1,*
而不是
tokens=1,2
%%b
将是一个包含该行其余部分的字符串),那么它将处理更多的
-