2017-01-30 3 views
3

При использовании в моей командной строке " используются двойные кавычки.Форматирование строки

$printername="Intouch Printer" 
print($printername) 

$command ='D:\spool12\spool.exe '+ $_.FullName + ' "'+ $printername+'"' 
print($command) 
iex $command 

Я получаю это в то время как я уверен, выполнение этого кода:

> D:\spool12\spool.exe D:\Spool Files-20170113T061110Z\Spool Files\Un 
> Readable\creame and fudge\00143.SPL IntouchPrinter 

Скорее я хочу, чтобы это было как:

> D:\spool12\spool.exe D:\Spool Files-20170113T061110Z\Spool Files\Un 
> Readable\creame and fudge\00143.SPL "IntouchPrinter" 
+1

Побег двойные кавычки '' 'с обратным шагом' – vonPryz

+0

результат D: \ spool12 \ spool.exe D: \ Spool Files-20170113T061110Z \ Файлы очереди \ Un Readable \ creame и fudge \ 00144.SPL ** \ 'Intouch Printer \' ** @ vonPryz –

+1

@AnujMasand, проверьте ответ MartinBrandl. Это похоже на лучший выбор – Nkosi

ответ

4

Я предпочитаю использовать формат строку а в таких случаях:

$command = 'D:\spool12\spool.exe {0} "{1}"' -f $_.FullName, $printername 
0

Вы также можете обернуть строки, как это:

$command = @" 
D:\spool12\spool.exe "Intouch Printer" 
"@ 
iex $command 
+0

не работает @kirill –

+0

@AnujMasand, какие ошибки вы получаете? –

+0

@ Kirill P. Sir, на самом деле я пытаюсь найти все подкаталоги для файлов .spl. Как только я получу первый подкаталог i, я получаю файл .spl один за другим. то я пытаюсь преобразовать этот файл спула в текстовый файл, используя spool.exe с аргументом как полное имя (абсолютный путь + имя файла) этого файла, а в кавычках мне нужно передать имя виртуального принтера, которое будет выполнять для меня работу , теперь, когда я делаю один за другим, как это ** PS D: \ spool12>. \ spool.exe. \ 00002.SPL "Intouch Printer" ** Я получаю желаемый результат, но это не хорошо, поскольку я хочу автоматизировать моя работа. ** –

0

Прочитайте About Quoting Rules, он расскажет вам, что вам нужно знать о котировках и избегать их.

В вашем случае вам нужно использовать двойные кавычки по всей команде, а затем использовать обратную линию, чтобы избежать котировок вокруг $printername.

Вы также должны использовать Subexpression operator$() так, что свойство FullName оценивает правильно:

$command = "D:\spool12\spool.exe $($_.FullName) `"$printername`"" 
+0

Все еще не работает sir @james C –

+0

** Я попробовал это и отлично работал для меня. Спасибо @James в любом случае. ** 'Get-ChildItem -Path C: \ WINDOWS \ system32 \ spool \ ПРИНТЕРЫ \ -filter * .spl | Еогеасп { $ команда = "D: \ Intouch_Printer_SW \ spool12 \ spool.exe "+ $ _ ПолноеИмя +" \'" Intouch Printer \' "" команда IEX $ # эхо $ команды дель $ _ ПолноеИмя ..} ' –