2017-02-20 27 views
0

Я хочу отправить файлы спула на принтер из папки спула один за другим и после обработки каждого файла он будет перемещен в другую папку или удалит его. Но когда я пытаюсь запустить ниже пакетного файла, он напрямую перемещает файлы спула, не отправляя на принтер, что связано с пакетной обработкой.Хотите выполнить две команды в пакетном файле Windows по одному

for %%f in (C:\WINDOWS\system32\spool\PRINTERS\*.SPL) do (
      echo %%~nf 
      start "" E:\spool\xyz\tp.exe "C:\WINDOWS\system32\spool\PRINTERS\%%~nf.SPL" "HP Printer" 
      move "C:\WINDOWS\system32\spool\PRINTERS\%%~nf.SPL" d:\%%~nf.txt 
     ) 

SO нужна любая альтернативная опция без использования окон PowerShell.

Заранее спасибо.

ответ

2

Это не из-за пакетной обработки. По умолчанию пакет ждет завершения команды перед тем, как продолжить. Поэтому оставлять start должен.
Проблема на самом деле - это команда start. По умолчанию start выполнит программу как новый процесс и не будет ждать ее завершения. Вместо этого используйте start /WAIT, опция /WAIT попросит его подождать. Но, как я сказал ранее, вам даже не нужно start. Предположив ваши выходы программы, когда она выполнила свою задачу, вы должны сделать:

for %%f in ("C:\WINDOWS\system32\spool\PRINTERS\*.SPL") do ( 
    echo %%~nf 
    E:\spool\xyz\tp.exe "%%~ff" "HP Printer" 
    move "%%~ff" d:\%%~nf.txt 
) 

В общем, что следует делать. Но если программа E:\spool\xyz\tp.exe сама запускает какой-то фоновый процесс и выходит, не дожидаясь его завершения, даже start /WAIT не поможет. Поскольку я не знаю, какую программу вы используете (E:\spool\xyz\tp.exe), я не смогу вам помочь в этом случае.

EDIT: Только небольшое улучшение я сделал в коде: вам не нужно указывать полный путь, чтобы получить файл, соответствующий переменной цикла, %%~ff будет делать это для вас (см this link для других) ,

+0

Зачем использовать 'START' вообще? Просто команда 'E: \ spool \ xyz \ tp.exe и т. Д.' Заставит командный файл ждать. –

+0

@ J.Baoby Я попробовал ваше решение, но файлы спула не были отправлены на принтер, который он переместил в другое место. И программа abot tp.exe просто отправляет файл спула на принтер для печати ничего, чтобы иметь дело с ним. Я попробовал с powershell, он отлично работает с PoweShell. Но некоторые старые Windows-ПК не имеют powershell. Так что это нужно делать в пакетном файле. –

+0

@ dev.Sumit это сработало для меня с другим исполняемым файлом. Вы уверены, что 'tp.exe' всегда выходит, как только файл спула фактически отправлен? Может ли это запустить другой процесс, который будет подключаться к принтеру и отправлять файлы, а не отправлять его сам? –

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

  • Нет связанных вопросов^_^