![如何在 Windows 7 中的备用数据流中执行批处理文件?](https://linux22.com/image/1276250/%E5%A6%82%E4%BD%95%E5%9C%A8%20Windows%207%20%E4%B8%AD%E7%9A%84%E5%A4%87%E7%94%A8%E6%95%B0%E6%8D%AE%E6%B5%81%E4%B8%AD%E6%89%A7%E8%A1%8C%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%EF%BC%9F.png)
通常,在创建可执行文件作为备用数据流后,例如:
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。您希望分隔符是一个您永远不会在代码中使用的字符。)