所以我目前正在编写一本关于安全性的教程,因此我必须使用批处理文件编写一个vbe文件(用VBScript编写的编码脚本)。
所以,我只需将其写入文件:
#@~^mgAAAA==6 P3MDKDP"+k;:PH+XY~@#@&fks~D;EdO{6k^+SPhnk/Co8WX~~AMkYnm6ks+B~T+O|wmYtBPDn:a{2lDtS~6kxms{alY4~@#@&s+k/Con8K6~',h/T4GavJKndDJ~~8BPEwlDlV,2M.WMJbP@#@&2zEAAA==^#~@
(注意:上面有些字符无法打印)。
但问题是我从未设法成功写过,我尝试使用http://www.robvanderwoude.com/escapechars.php的说明来逃避所有角色并且它没有用。
我尝试使用DelayedExpansion
这样:
SET "foo=#@~^mgAAAA==6 P3MDKDP"+k;:PH+XY~@#@^&fks~D;EdO{6k^+SPhnk/Co8WX~~AMkYnm6ks+B~T+O|wmYtBPDn:a{2lDtS~6kxms{alY4~@#@&s+k/Con8K6~',h/T4GavJKndDJ~~8BPEwlDlV,2M.WMJbP@#@^&2zEAAA==^#~@ "
setlocal EnableDelayedExpansion
(
echo !foo!
) > test.vbe
它也没有用,我对没有转义的字符有问题。
任何想法?谢谢!
答案 0 :(得分:3)
原因很明显,那是[ ... P3MDKDP ]之后的引号。因为你分配变量" foo"用一个开放和一个紧密的引号混淆字符,就像SET "foo=..."
一样,批量认为你停止分配" foo"在[ ... P3MDKDP ]之后。这样就可以单独留下[ + k;:PH + XY~ ..... ],而无需分配变量或使用命令。批处理无法识别,因此命令提示符会自动退出。
你可以做的是,将引号后面的部分分配给另一个变量,我将它命名为" foo2"在以下示例中:
@echo off
setlocal enabledelayedexpansion
SET "foo=#@~^mgAAAA==6 P3MDKDP""
SET "foo2=+k;:PH+XY~@#@^&fks~D;EdO{6k^+SPhnk/Co8WX~~AMkYnm6ks+B~T+O|wmYtBPDn:a{2lDtS~6kxms{alY4~@#@&s+k/Con8K6~',h/T4GavJKndDJ~~8BPEwlDlV,2M.WMJbP@#@^&2zEAAA==^#~@ "
echo !foo!!foo2!>test.vbe
pause >nul
而且,如果你在引号之前/之后添加另一个引号,就像这样[ P3MDKDP "" ],即使你没有将第二部分分配给一个新变量,它仍然可以工作,但它在字符串中输出一个额外的引号。
答案 1 :(得分:1)
也许这个小技巧可以帮助你:
@echo off
for /f "delims=[]" %%n in ('find /n "REM DATA:" "%~dpnx0"') do set /a n=%%n
more +%n% "%~dpnx0">test.vbe
REM rest or your batchfile
goto :eof
REM DATA:
#@~^mgAAAA==6 P3MDKDP"+k;:PH+XY~@#@^&fks~D;EdO{6k^+SPhnk/Co8WX~~AMkYnm6ks+B~T+O|wmYtBPDn:a{2lDtS~6kxms{alY4~@#@&s+k/Con8K6~',h/T4GavJKndDJ~~8BPEwlDlV,2M.WMJbP@#@^&2zEAAA==^#~@
(这个技巧可以避免任何字符转义或拆分字符串。也可以用来编写多行文字)