使用batch echo写一个vbe文件(字符不转义)

Using batch echo to write a vbe file (characters are not escaped)

所以我目前正在编写有关安全性的教程,因此我必须使用批处理文件编写一个 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

它也没有用,我遇到了未转义字符的问题。

有什么想法吗??谢谢!!

原因很明显,就是[...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 ""],甚至尽管您没有将第二部分分配给新变量,它仍然有效,但它会在字符串中输出一个额外的引号。

也许这个小技巧可以帮到你:

@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==^#~@ 

(此技巧可避免任何字符转义或拆分字符串。也可用于编写多行文本)