我遇到了ss64.com,它为如何编写Windows命令解释器将运行的批处理脚本提供了很好的帮助.
但是,我一直无法找到批处理脚本的语法,扩展或不扩展的方法,以及如何逃避事情的良好解释.
以下是我无法解决的示例问题:
foreach $i (@ARGV) { print '*' . $i ; }),编译它并以这种方式调用它:
my_script.exe "a ""b"" c"?输出是 *a "b*cmy_script.exe """a b c"""?输出它*"a*b*c"echo命令如何工作?在那个命令中扩展了什么?for [...] %%I在文件脚本中使用,但for [...] %I在交互式会话中?%PROCESSOR_ARCHITECTURE%字面回声?我发现echo.exe %""PROCESSOR_ARCHITECTURE%有效,有没有更好的解决方案?%配对?例:
set b=a,echo %a %b% c%?%a a c%set a =b,echo %a %b% c%?bb c%批处理文件中的特殊字符很难,但是我没有找到正确的解决方法来正确地转义这个特定字符串的前两个字符我试图通过该应用程序.
SET pass=^&AntiBatchfileString
A_Program.exe /pass=%pass%
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情:
:: Escaping the escape twice, first for ^, second for &.
SET pass=^^^^&AntiBatchfileString
echo %pass%
:: Combining escapes.
SET first=^^
SET second=^^&AntiBatchfileString
SET pass=%first%%second%
echo %pass%
:: Preventing expansion
SET first=^^
SET second=^^&AntiBatchfileString
SET pass=!first!%second%
echo %pass%
:: I got this to print correctly
SET "pass=^&AntiBatchfileString"
echo ^^%pass%
Run Code Online (Sandbox Code Playgroud)
仍然在通过最后一个时它不接受登录,我不知道最终输出是什么.这让我想到也许是在将参数传递给应用程序时尝试进行另一次扩展,所以我也引用了它.
SET "pass=^&AntiBatchfileString"
A_Program.exe "/pass=^^%pass%"
Run Code Online (Sandbox Code Playgroud)
它仍然无法正常工作,我不确定我现在缺少什么.