2013-10-11 39 views
0

我想從字典打印來填充另一個腳本。我不斷收到「行後續字符」的意外字符。我不知道爲什麼試圖打印字典密鑰對

mydic = {"printer1": "printserver1", "printer2": "printserver2"} 

for key in mydic.keys(): 
    print ("For /F \"Tokens=4 delims=\\\" %%I In ('reg query HKCU\\Printers\\Connections  ^|find /I \"" + key + "\"') Do If \"%%I\"==\",,"+ mydic[key] +"," + key + "\" goto :REMOVE" + \n + "goto :SKIP" + \n + ":REMOVE" + \n + "RUNDLL32 printui.dll,PrintUIEntry /n \\\\"+ mydic[key] +"\\" + key + " /dn" + \n + ":SKIP") 
+0

你需要把\ n放在引號中 – rlms

+0

但是你的主要問題是你的代碼沒有意義。你想做什麼? – rlms

+0

遍歷字典遍歷其鍵,所以不需要顯式調用'keys()'。 – chepner

回答

8

簡化這個,所以它不是所有的一行,更多的可讀性和換行符自動使用多行字符串的一部分s:

mydic = {"printer1": "printserver1", "printer2": "printserver2"} 

template = r""" 
FOR /F in blah blah blah 
    do something with {key} 
    with the value of {value} 
    blah blah blah 
END FOR 
""" 

for key, value in mydic.iteritems(): 
    print template.format(key=key, value=value) 
+0

謝謝!我感謝您的幫助! – user2871917

2

使字符串的\n換行符部分:

print ("For /F \"Tokens=4 delims=\\\" %%I In ('reg query HKCU\\Printers\\Connections  ^|find /I \"" + 
     key + "\"') Do If \"%%I\"==\",," + mydic[key] + "," + key + 
     "\" goto :REMOVE\ngoto :SKIP\n:REMOVERUNDLL32 printui.dll,PrintUIEntry /n \\\" + 
     mydic[key] +"\\" + key + " /dn\n:SKIP") 

你真的想用三引號原始字符串在這裏使用了一些string formatting,共同削減所有這些反斜槓:

template = r"""For /F "Tokens=4 delims=\" %%I In ('reg query HKCU\Printers\Connections  ^|find /I "{0}"') Do If "%%I"==",,"{1},{0}" goto :REMOVE 
goto :SKIP 
:REMOVERUNDLL32 printui.dll,PrintUIEntry /n \{1}\{0} /dn 
:SKIP""" 

for key in mydic: 
    print(template.format(key, mydic[key])) 
+0

謝謝!字符串格式鏈接非常有幫助! – user2871917