2014-10-08 18 views
2

我想製作一個真正的.bat到.exe轉換器。我目前正試圖創建一個腳本女巫將cmd命令注入到一個cmd進程/環境中。這裏是我有這麼票價:Python多線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」這些命令進行迭代,並執行它們一個接一個。一旦我將'hw'建立爲'Hi',變量就消失了。不僅如此,而不是說「ECHO關閉」,它顯示「%hw%」。如果有人可以幫助我,請這樣做。

回答

1

問題是您在新的cmd環境中執行每行而不是執行在一個CMD一行一行地得到它workig你必須連接具有&&所有行,然後運行整個字符串作爲一個命令行

但還有一個問題海外商品會有這樣一行:。

@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,則即使a中有錯誤,也會執行b。

+0

這是一個命令列表。我的項目的祕訣是能夠運行任何.bat可執行文件,而無需將這些命令放在真實的.bat文件中,因爲這樣人們就可以看到批處理代碼。 – AidanCodeX 2014-10-08 14:00:01

+0

@AidanCodeX:你只需要帶任何bat文件,用&&連接所有行,用!x代替任何%x%!並在行的開頭放置「@SETLOCAL EnableDelayedExpansion」。然後只需執行整行。這將適用於任何bat文件。 – MichaelS 2014-10-09 09:25:36

+0

這沒有奏效。我試過:b ='@echo off \ n:a \ ncls \ necho Hello World!\ n暫不使用\ n \ n \ n'.replace('\\ n','&&'),然後os.system(b),它關閉並返回1. – AidanCodeX 2014-10-11 19:23:54