Python多行cmd条目在一个环境中

我正在尝试制作一个真正的.bat到.exe转换器。 我目前正试图创build一个脚本女巫注入cmd命令到一个cmd进程/环境。 这是我有这样的票价:

#!/usr/bin/python3 from os import system as cmd def ce(*a): a = list(a) for b in range(0, len(a)): cmd(a[b]) # I need each entry of cmd(a[b]) to run in the same cmd environment and therefore # do what a normal .bat/.cmd program would. return a cd1 = ['@echo off', 'set hw=Hi', 'echo %hw%', 'set hw', 'pause'] if ce(*cd1) != cd1: print('Error') cmd('pause') quit() 

它所做的只是遍历'cd1'中的这些命令并逐个执行它们。 只要我build立“hw”为“你好”,variables就消失了。 不仅如此,而不是说“ECHOclosures”,而是显示“%hw%”。如果有人能帮助我,请这样做。

问题是你在一个新的cmd环境中执行每一行,而不是在一个cmd中逐行执行。 为了得到它,你必须用&&连接所有行,然后将整个字符串作为一个命令行运行。

但是还有一个问题。 Concider这一行:

@echo off && set x=123 && echo %x% && pause

这不会返回输出123,因为命令是一次执行的,所以echo %x%不会知道%x%被设置为123.为了得到这个工作,你必须添加命令SETLOCAL EnableDelayedExpansion并且将地址x通过!x! 而不是%x%

所以行

@SETLOCAL EnableDelayedExpansion && @echo off && set x=123 && echo !x! && pause

会给你所需的输出。

你应该决定你的脚本如何工作。 如果您使用a && b b仅在成功时执行。 如果你用户a & b而不是b,即使在a中有错误也会被执行。