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")
4

2 に答える 2

8

これを単純化して、すべてが 1 行にならないようにします。複数行の文字列を使用すると、読みやすくなり、改行が自動的に文字列の一部になります。

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)
于 2013-10-11T18:47:09.363 に答える
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")

ここでは、バックスラッシュをすべて削減するために、トリプル クォートで囲まれた生の文字列と一緒に、文字列の書式設定を使用する必要があります。

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]))
于 2013-10-11T18:45:06.750 に答える