Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Автоматическая печать файлов из 1ой папки

Ответить
Настройки темы
CMD/BAT - [решено] Автоматическая печать файлов из 1ой папки

Новый участник


Сообщения: 16
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: aRHangel2013
Дата: 30-08-2012
Доброе время суток! Граждане программисты, подскажите как реализовать мою задачку:
есть некая прога, которая создает *.prt-0, *.prt-1, *.prt-2, *.prt-3 (это обычные txt-эшки) и размещает их по пути [сетевой диск:]\\год\месяц\день\. Нужно автоматически распечатать файлы на локальном принтере (LPT) (как только они появляются) из этой папки. Еще проблема в том, что запись и изменение в папке [сетевой диск:]\\год\месяц\день\ запрещено.
я кое что нарыл\пепеделал:
HTML код: Выделить весь код
@Echo Off set $dd=%DATE:~0,2% set $mm=%DATE:~3,2% set $yyyy=%DATE:~6,4% Set $SRC=y:\"%$yyyy%"\"%$mm%"\"%$dd%"\ToPrint\ Set $DST=y:\"%$yyyy%"\"%$mm%"\"%$dd%"\ToPrint\old\ Set $MSK=*.prt-0 If Not Exist "%$SRC%" MD "%$SRC%" If Not Exist "%$DST%" MD "%$DST%" :LOOP If Exist "%$SRC%\%$MSK%" For %%i In ("%$SRC%\%$MSK%") Do ( notepad /P "%%i" MOVE /Y "%%i" "%$DST%" >Nul Echo файл "%%~nxi" обработан ) Ping -n 2 127.0.0.1 >Nul GoTo LOOP

но это не подошло, т.к. нельзя делать изменения в source папке.

и имена файлов идут просто счетчиком по очереди, но с маленьким подвыподвертом
... когдато там начались
01168608.prt-1
01168608.prt-2
01168609.prt-0
01168610.prt-0
01168611.prt-0
~~~~~~~~~~~
01168649.prt-0
01168652.prt-1
01168652.prt-2
01168652.prt-3
01168650.prt-0
01168651.prt-0

... ну и продолжаются

Отправлено: 19:27, 29-08-2012

 

Старожил


Сообщения: 280
Благодарности: 72

Профиль | Отправить PM | Цитировать


Ну в принципе у тебя все в батнике и написано
Чуть доработать надо было и все
читать дальше »

Код: Выделить весь код
Echo Off
set file=file
set $dd=%DATE:~0,2%
set $mm=%DATE:~3,2%
set $yyyy=%DATE:~6,4%
Set $Folder=y:\"%$yyyy%"\"%$mm%"\"%$dd%"
: print
for /f "delims=" %%d in ('dir /b/a-d/od "%Folder%\*.prt"') do set "$d=%%~nxd"
echo %$d%
echo file=%file%
if  %file%==%$d% (
ping 127.0.0.1 -n 2 >>null
Set file=%$d%
echo "noprint"
goto print
echo 1) else (
Set file=%$d%
ping 127.0.0.1 -n 2 >>null
echo print %Folder%\%$d%
print /d:myprintername %Folder%\%$d%
goto print)



Пояснения:
set file=file
нужно только для первого if.
скрипт берет последний созданный файл исравнивает его с file если равно то не печатет если не равно то печатает.
строчкой ping 127.0.0.1 -n 2 >>null указываешь частоту проверки.

Последний раз редактировалось Molchune, 30-08-2012 в 18:53.


Отправлено: 15:55, 30-08-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 16
Благодарности: 0

Профиль | Отправить PM | Цитировать


Почемуто прога не печатает новый, поповший в папку, файл; и если там 2-3 файла сразу, печатается только 1й. значит перебор не работает. и не запускается при пустой source папке. ща попробую разобраться. подскажи, что за %$d% и как она работает?
Molchune, спасибо за код. есть хоть за что зацепиться и дорабоать

Последний раз редактировалось aRHangel2013, 31-08-2012 в 11:50.


Отправлено: 10:18, 31-08-2012 | #3


Старожил


Сообщения: 280
Благодарности: 72

Профиль | Отправить PM | Цитировать


Цитата aRHangel2013:
%$d% »
просто переменная цикла.
Цитата aRHangel2013:
если там 2-3 файла сразу, печатается только 1й »
в принципе так и должно быть, если в единицу времени попало несколько документов.

Значи смотри(там же спецом оставлены echo чтобы видно было что за переменные)
Смотри этим вот
Код: Выделить весь код
for /f "delims=" %%d in ('dir /b/a-d/od "%Folder%\*.prt"') do set "$d=%%~nxd"
мы получаем последний добавленный файл. если в момент времени их будет два файлы то уж только последний он распечатет.

Смысл был в том, что файло сыпется меньше чем 1 раз в секунду. тогда берется последний созданный файл и печатается.
можно тогда задержку убрать (ping) мб будет лучше.

Если чаще, то тогда надо сравнивать содержимое папки с какой то величиной, то есть надо будет сохранять данные(dir/a-d/b ) b и сравнивать на прошлый момент времени а разницу печатать (у тебя было условие не сохраняя) хотя можно мб сохранять в %temp%?

Отправлено: 11:55, 31-08-2012 | #4


Новый участник


Сообщения: 16
Благодарности: 0

Профиль | Отправить PM | Цитировать


бывает попадают файлы и по 3 сразу
01168685.prt-3 29.08.2012 21:19:43
01168685.prt-2 29.08.2012 21:19:43
01168685.prt-1 29.08.2012 21:19:43

поэтому, скорее всего, нужно толи по имени.расширению сравнивать, толи весь список, и печатать разницу.
но вот все равно не печатает при добавлении в папку нового файла
читать дальше »
HTML код: Выделить весь код
D:\DOCs\BAT>Echo Off 2.prt-0 file=file print y:\"2012"\"08"\"31"\2.prt-0 y:\2012\08\31\2.prt-0 в настоящее время печатается. 2.prt-0 file=2.prt-0 "noprint" 2.prt-0 file=2.prt-0 "noprint" ~~~~~~~~~~ 2.prt-0 file=2.prt-0 ^C"noprint" Завершить выполнение пакетного файла [Y(да)/N(нет)]?


Отправлено: 12:55, 31-08-2012 | #5


Старожил


Сообщения: 280
Благодарности: 72

Профиль | Отправить PM | Цитировать


хз.. я когда ручками создаю файл в папке он пишет что будет печатать.

а отсортируй в папке файлы по дате создания. какой последний будет? Такой же как и в скрипте?

Отправлено: 13:27, 31-08-2012 | #6


Ветеран


Contributor


Сообщения: 2732
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo Off
cls

Set Share0="E:\DDDDD\*.prt-0"
Set Share1="E:\DDDDD\*.prt-1"
Set Share2="E:\DDDDD\*.prt-2"
Set Share3="E:\DDDDD\*.prt-3"

Set Index=%~n0.EXCLUDE

if Not Exist %Index% Echo %Index% >%Index%

Call :Printer %Share0%
Call :Printer %Share1%
Call :Printer %Share2%
Call :Printer %Share3%

GoTo:Eof
:Printer

FOR /F "usebackq delims=" %%i IN (`xcopy /L /S /EXCLUDE:%Index% %1 "%Tmp%\" 2^>nul^`) DO (
	If  Exist  "%%i" (
                echo %%i Здесь надо файл распечатать
		echo %%i >>%Index%
        ) 
)
Не очень понял Ваш сетевой путь, замените мои пути "E:\DDDDD\*.prt-0" на свои сетевые. И вместо
echo %%i Здесь надо файл распечатать
нарисуйте свою команду для распечатки.
Идея решения:
Команда xcopy /L выдаёт список файлов (реальное копирование не происходит) за исключением списка файлов, указанных в файле под ключом /EXCLUDE. Кстати, /S указывает на просмотр в поддиректориях, соответственно заботиться о указании в пути папки с датой не обязательно (если, конечно, по сетевому пути не содержится других данных.
Батник делает рядом с собой файл с именем батника и расширением EXCLUDE (имя и расширение можете сами придумать (в переменной Index), я решил, что так логичнее ). И далее в этот файл записываются полные имена уже обработанных файлов. То есть, батник должен быть в том месте, где у Вас есть права на запись, для обрабатываемых файлов расположение в месте для чтения.
То есть в этом файле хранится список всех ваших обработанных файлов, при повторном запуске батника они уже обрабатываться не будут.
Я не привязываюсь к дате файлов, я анализирую, обрабатывались ли они. Можно, конечно, формировать пути к файлам на основе текущей даты, но это уж Вам решать, моему батнику это никак не противоречит
Как организовать цикл по времени - дело вкуса. Я бы поместил батник в назначенные задания.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 01-09-2012 в 12:58.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:25, 01-09-2012 | #7


Новый участник


Сообщения: 16
Благодарности: 0

Профиль | Отправить PM | Цитировать


я примерно так и собирался сделать (это наверно один подходящий вариант) : проверять папку на наличие файлов, составлять список файлов, печатать, потом снова проверять папку, и сверять со списком, разницу печатать. поставить все на scheduler.
Цитата:
echo %%i Здесь надо файл распечатать
чет я не пойму что сюда написать????
надо как то так ???
Код: Выделить весь код
print /D:\\comp\hp1320 %Share0%\%Tmp%
%Share% - это ж путь к файлу, а надо печатать разницу
я вот конкретно не пойму, как задать на печать "разнину" между реальным списком файлов, и уже напечатанным???

Отправлено: 23:29, 03-09-2012 | #8


Старожил


Сообщения: 280
Благодарности: 72

Профиль | Отправить PM | Цитировать


Цитата aRHangel2013:
%Share% - это ж путь к файлу, а надо печатать разницу
я вот конкретно не пойму, как задать на печать "разнину" между реальным списком файлов, и уже напечатанным??? »
в данном скрипте тебе надо просто указать
Код: Выделить весь код
print /D:\\comp\hp1320 %%i
Так как в переменной %%i уже содержится полный путь до файла
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:08, 04-09-2012 | #9


Ветеран


Contributor


Сообщения: 2732
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Цитата:
я вот конкретно не пойму, как задать на печать "разнину" между реальным списком файлов, и уже напечатанным???
Вам не надо задавать никакой разницы: имена файлов, уже напечатанных, хранятся в файле, который делает батник, а о именах ненапечатанных файлов, которые выдаст For в переменную %%i, позаботится xcopy c ключом /EXCLUDE, в тот же файл там же запишется имя файла после печати. Единственно, надёжнее взять в команде печати переменную в кавычки "%%i"
Цитата:
То есть в этом файле хранится список всех ваших обработанных файлов, при повторном запуске батника они уже обрабатываться не будут.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 04-09-2012 в 13:12.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:34, 04-09-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Автоматическая печать файлов из 1ой папки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - Запрет на печать содержимого папки SanCho Microsoft Windows 7 3 15-05-2012 17:32
Разное - [решено] Автоматическая печать на принтер Magikanin2006 Microsoft Windows 7 2 12-05-2011 12:30
Печать файлов с расширением prn Boikov Хочу все знать 8 23-04-2011 18:24
Разное - [решено] Печать файлов из Explorerа st.andrew Microsoft Windows 2000/XP 6 10-02-2009 15:58
Офис и Текст - Печать PRN файлов (печать в файл) ivieDVeD Программное обеспечение Windows 12 13-04-2006 16:49




 
Переход