使用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==^#~@
(此技巧可避免任何字符转义或拆分字符串。也可用于编写多行文本)
所以我目前正在编写有关安全性的教程,因此我必须使用批处理文件编写一个 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==^#~@
(此技巧可避免任何字符转义或拆分字符串。也可用于编写多行文本)