我正在尝试制作一个真正的.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中有错误也会被执行。