如何在 Windows 7 中的备用数据流中执行批处理文件?

如何在 Windows 7 中的备用数据流中执行批处理文件?

通常,在创建可执行文件作为备用数据流后,例如:

type exec_this.bat > C:\blank.txt:exe.bat

可以简单地说

start C:\blank.txt:exe.bat

运行可执行文件。在 Windows 7 中,我似乎只收到“访问被拒绝。”或“系统找不到文件 $WHATEVER_THE_FILE_IS。”

我如何执行这个批处理文件?

答案1

接受的答案每次只运行批处理文件中的一行。这会中断批处理文件中的任何高级逻辑。但是,如果您使用临时文件,则可以在一行中执行此操作:

cat < blank.txt:exe.bat > temp.bat & temp.bat

您还可以通过类似的命令在备用数据流中执行 PowerShell 脚本:(尽管我确信也有纯 PowerShell 方式。)

cat < blank.txt:exe.ps1 > temp.ps1 & powershell .\temp.ps1

例子

在备用数据流中创建批次:notepad blank.txt:exe.bat

if 6==7 then goto pie 
echo apple 
goto end 
:pie 
echo pie 
:end 

破碎的:

E:\broken>for /f "usebackq delims=φ" %i in (blank.txt:exe.bat) do %i

E:\broken>if 6==7 then goto pie
'if' is not recognized as an internal or external command,
operable program or batch file.

E:\broken>echo apple
apple

E:\broken>goto end

E:\broken>
The filename, directory name, or volume label syntax is incorrect.

E:\broken>echo pie
pie

E:\broken>
The filename, directory name, or volume label syntax is incorrect.

更好的:

E:\better>cat < blank.txt:exe.bat > temp.bat & temp.bat

E:\better>if 6 == 7 then goto pie

E:\better>echo apple
apple

E:\better>goto end

答案2

Windows 7 悄悄地删除了执行任何事物从 ADS 中。但是,从 DOS 命令行,还有其他选项。对于批处理文件,您可以逐行执行:

for /f "usebackq delims=φ" %i in (blank.txt:exe.bat) do %i

(请记住,这实际上并没有将批处理文件执行到其自己的进程中,它只是读取并执行文件中的每一行。φ符号的输入方式为替代代码编号 2541。您希望分隔符是一个您永远不会在代码中使用的字符。)

相关内容