gpt4 book ai didi

windows - windows cmd 如何设置解析变量名?

转载 作者:行者123 更新时间:2023-12-03 11:05:05 35 4
gpt4 key购买 nike

如果我运行了 set如下:

C:\Users\vagrant>SET UNDEFINED=foo

C:\Users\vagrant>SET UNDEFINED
UNDEFINED=foo

C:\Users\vagrant>SET UNDEFINED
Environment variable UNDEFINED not defined

C:\Users\vagrant>SET UNDEFINED | more
UNDEFINED=foo

C:\Users\vagrant>SET UNDEFINED >nul

C:\Users\vagrant>SET UNDEFINED >nul
Environment variable UNDEFINED not defined

C:\Users\vagrant>SET UNDEFINED | more
Environment variable UNDEFINED not defined

C:\Users\vagrant>SET UNDEFINED >nul | more
Environment variable UNDEFINED not defined

C:\Users\vagrant>SET UNDEFINED >nul| more

C:\Users\vagrant>SET UNDEFINED 2>nul | more

C:\Users\vagrant>SET UNDEFINED 2>nul| more
UNDEFINED=foo
注意,上面的第二个命令是 SET UNDEFINED ,后面有两个空格。和 SET UNDEFINED >nul , SET UNDEFINED >nul | more , SET UNDEFINED 2>nul | more前面多了一个空格 | .在这些命令中, set用另外两个空格解析变量。那么如何 set解析变量名。我也找到了 cmd parse scripts ,但这里如何标记变量名?
编辑
使用空格前的文件重定向时会出现此问题。换句话说,在字符串后添加空格并重定向。例子: echo foo>bar.txt bar.txt 前面的空格附加到文件以及 foo .
以下是这方面的示例:
例子:
enter image description here
结果是:
enter image description here

最佳答案

当您添加额外的空格时,您实际上是在告诉 set 显示名为 "UNDEFINED " 的变量的值。或 %UNDEFINED %这实际上是未定义的。您可以看到,如果您这样做 set "UNDEFINED" 空间将不再是问题双引号后有空格。和做set UNDEFINED =foo是一样的这不会返回 %UNDEFINED% 的变量bu 代替 %UNDEFINED %以下是这方面的示例:

set UNDEFINED=foo
set UNDEFINED =foo
然后运行时,没有任何额外的空格: set UNDEFINED结果如预期。
UNDEFINED=foo
UNDEFINED =foo
但是当你用额外的空格运行它时 set UNDEFINED 结果不再匹配 %UNDEFINED%由于您提供了额外的空间。
UNDEFINED =foo
在这里我们可以展示更多匹配的工作原理
set UNDEF=foo
set UNDEFI=foo
set UNDEFIN=foo
set UNDEFINE=foo
set UNDEFINED=foo
set UNDEFINED =foo
set UNDEFINED =foo
set UNDEFINED =foo
现在看看所有这些的结果
set UN
set UNDEF
set UNDEFINE
set UNDEFINED
显然通过添加空格: set UNDEFINED 但是如果我们添加 4 个空格,代表一个我们从未设置过的变量,那么我们将得到 un undefined可变结果。 set UNDEFINED 最后,要克服这个问题是确保我们正确设置变量并用双引号将它们引用以获得所需的结果。
set "UNDEFINED=foo"
set "UNDEFINED"
后面的 set 命令不会关心你在双引号结束后给了多少空格,它会返回任何带有 UNDEFINED 字样的变量。在里面。即 set "UNDEFINED" 使用重定向的结果也是如此 >或管道 | .具体使用重定向。 >之前的一切被视为您要重定向的字符串。例子:
echo foo >out.txt
将导致 out.txt包含 foo 包括空间。
因此,需要排除空格,但如果您的字符串以数字结尾,这就会成为一个问题。 IE
echo foo2>out.txt
这将重定向 stderr归档。
所以我们再次克服了这个问题,通过将代码括起来:
(echo foo)>out.txt
因此,给出你的例子,虽然管道到 nul不会返回任何结果,除非您指定类型 (stdout/stderr)
(SET UNDEFINED)2>nul|more
(SET UNDEFINED)1>nul|more
(SET UNDEFINED)>nul|more
编辑
再次。在带有空格的字符串之前的附加空格将在输出中添加空格。再次使用 echo
(echo foo | more)>out.txt
foo之间有空格和 |如果您查看 out.txt 中的结果你会注意到这个空间。这同样适用于重定向 >因此,在这些实例中使用带括号的块来消除空格。
编辑2
根据您提供的屏幕截图。 cmd以一种它并不真正关心您放置它的位置的方式使用重定向。 >out.txt echo foo将导致:
foo
在文件中。添加空格的地方,将被附加到文件中 >out.txt echo foo 将导致 foo 与您的示例类似,它将回显您在重定向行中提供的任何内容。 echo foo>out.txt 或者 echo foo>out.txt .将附加到文件,因为重定向实际上是这里的关键功能,它将附加您提供的内容。
但是,您会注意到重定向本身,然后在命令之前提供额外的空格不会这样做。这仅仅是因为您要求系统将字符串重定向到文件,然后空格成为命令分隔符。所以这: >out.txt echo foo只会导致 foo在您的输出文件中。
所以.. 确保我们不添加这些不需要的空格的最佳方法是: >out.txt(echo foo)

关于windows - windows cmd 如何设置解析变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64586408/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com