2013-10-11 2 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

Смежные вопросы