Tom*_*lak 8 windows cmd batch-file
假设这个批处理文件
call :SomeFunction "a string with an > arrow"
goto:eof
:SomeFunction
echo %~1
goto:eof
Run Code Online (Sandbox Code Playgroud)
这个的输出是
call :SomeFunction "a string with an > arrow" echo a string with an 1>arrow goto:eof goto:eof
并arrow创建一个包含的名为的文件a string with an.请注意1>.
>在这种情况下,如何防止命令处理器将其解释为重定向符号?(提示:我已经尝试过了^>,不是吗.)
编辑:其他运营商(|和&)当然也受到影响.
您可以使用FOR /F命令,而不是:
echo %~1
Run Code Online (Sandbox Code Playgroud)
用这个:
FOR /F "delims=" %%i IN ("%~1") DO echo %%i
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,现在您需要在传递用双引号分隔的参数时处理奇怪的转义行为.例如,"a^2"将被转义为"a^^2",如果您尝试使用"a^^2"或没有问题"a\^2".您可以做什么(来自您自己的评论)是使用临时变量并进行转义(然后删除双引号):
set TEMP=%TEMP:>=^>%
Run Code Online (Sandbox Code Playgroud)
如果您不想关心逃避,您也可以尝试:
set "tmp="many \ ^ > ' characters and quotes""
Run Code Online (Sandbox Code Playgroud)
注意双引号括起set参数和字符串中的许多特殊字符.在这种情况下,tmp环境变量实际上是:"many \ ^ > ' characters and quotes",您可以简单地将其用作:
FOR /F "delims=" %%1 IN (%tmp%) DO echo %%1
Run Code Online (Sandbox Code Playgroud)
注意%1而不是"%~1".现在让它变得更复杂.如果你需要双引号"的字符串中那么一些字符将不会进行转义(&和|举例).您可以简单地删除引号:
set "tmp=many \ ^ > ' | & characters and quotes"
Run Code Online (Sandbox Code Playgroud)
用过的:
FOR /F "delims=" %%1 IN ("%tmp%") DO echo %%1
Run Code Online (Sandbox Code Playgroud)
要么
FOR /F "delims== tokens=2" %%1 IN ('set tmp') DO echo %%1
Run Code Online (Sandbox Code Playgroud)
FOR如果指定usebackq选项,请不要忘记可以使用backtips来分隔字符串.您可以使用临时文件或...更好... PowerShell脚本...
| 归档时间: |
|
| 查看次数: |
1771 次 |
| 最近记录: |