Echo **Echo 3> args.txt** >X.bat,我该如何修复这段代码?

Echo **Echo 3> args.txt** >X.bat, how do i fix this code?

Echo Echo 3> args.txt >X.bat

我试图将这行代码 (Echo 3> args.txt) 放入名为 X 的批处理文件中,但最终发生了什么

: X 批处理文件
回声

:Args 文本文件
里面什么都没有

它将 echo (Just echo) 放入 x.batch 并创建一个空白的 args 文本文件。 我该如何修复代码,以便将 Echo 3> args.txt 放入 x 批处理中?

使用

Echo Echo 3^> args.txt>X.bat

由于>有特殊含义(重定向),必须用^转义才能解释为字面字符。

再提示:

>X.bat 之前不插入 space 否则此 space 将附加到创建的批处理文件的行尾。

cmd.exe 将此行执行为

Echo Echo 3> args.txt 1>X.bat

另请参阅 Microsoft 的 TechNet 文章 Using command redirection operators


编辑:

如果环境变量 password 也可以包含特殊字符,如在命令提示符 window 之后的帮助输出末尾所列 运行 cmd.exe /?, 如果使用:

会更好
@echo off
setlocal EnableDelayedExpansion
set "password=<hello>"
echo echo var1=!password!^>args.txt>>Enter_PassCode.bat
endlocal

在运行set /?help set命令set输出的帮助中解释了延迟的环境变量扩展。这里使用延迟扩展来避免 运行 这个批处理文件的语法错误,因为 <> 在环境变量 password.[ 的字符串中。 =26=]

此示例将附加到 Enter_PassCode.bat

echo var1=<hello>>args.txt

执行这个批处理文件当然会再次导致执行 <hello> 作为密码的错误。

使 Enter_PassCode.bat 无任何错误可执行的解决方案是:

@echo off
setlocal EnableDelayedExpansion
set "password=<hello>"
echo @echo off>Enter_PassCode.bat
echo setlocal EnableDelayedExpansion>>Enter_PassCode.bat
echo set "password=!password!">>Enter_PassCode.bat
endlocal
echo echo var1=!password!^>args.txt>>Enter_PassCode.bat
echo endlocal>>Enter_PassCode.bat

此批处理代码生成 Enter_PassCode.bat,内容为

@echo off
setlocal EnableDelayedExpansion
set "password=<hello>"
echo var1=!password!>args.txt
endlocal