arrow" goto:eof :SomeFunction echo %~1 goto:eof 这-6ren">
gpt4 book ai didi

windows - 如何将重定向符号(< 和 >)传递给 Windows 批处理文件函数?

转载 作者:可可西里 更新时间:2023-11-01 12:48:01 27 4
gpt4 key购买 nike

假设这个批处理文件

call :SomeFunction "a string with an > arrow"

goto:eof

:SomeFunction
echo %~1
goto:eof

这个的输出是

call :SomeFunction "a string with an > arrow"echo a string with an  1>arrowgoto:eofgoto:eof

并创建一个名为arrow 的文件,其中包含带有 的字符串。注意 1>

在这种情况下,如何防止命令处理器将 > 解释为重定向符号? (提示:我试过 ^> 但不是这样。)

编辑:其他运算符(|&)当然也会受到影响。

最佳答案

您可以为此使用 FOR/F 命令,而不是:

echo %~1

使用这个:

FOR /F "delims=" %%i IN ("%~1") DO echo %%i

编辑:请注意,现在当您传递以双引号分隔的参数时,您需要处理奇怪的转义行为。例如 "a^2" 将被转义"a^^2",如果您尝试使用 "a 也没关系^^2""a\^2"。你可能会做的(根据你自己的评论)是使用一个临时变量并进行转义(然后删除双引号):

set TEMP=%TEMP:>=^>%

如果你不想关心转义你也可以尝试:

set "tmp="many \ ^ > ' characters and quotes""

注意双引号将 set 参数和字符串中的许多特殊 字符括起来。在这种情况下,tmp 环境变量的字面意思是:"many\^ > ' characters and quotes",您可以简单地将其用作:

FOR /F "delims=" %%1 IN (%tmp%) DO echo %%1

请注意 %1 而不是 "%~1"。现在让我们把它变得更复杂。如果您需要在字符串中使用双引号 ",那么某些字符将不会被转义(例如 &|)。您可以简单地删除引用:

set "tmp=many \ ^ > ' | & characters and quotes"

用过的:

FOR /F "delims=" %%1 IN ("%tmp%") DO echo %%1

或者

FOR /F "delims== tokens=2" %%1 IN ('set tmp') DO echo %%1

如果您指定了 usebackq 选项,请不要忘记您可以使用反向提示来分隔 FOR 字符串。您可以使用临时文件或...更好...PowerShell 脚本...

关于windows - 如何将重定向符号(< 和 >)传递给 Windows 批处理文件函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21406151/

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