Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Создание скрипта подсчета по маске и вывода на экран через msg (http://forum.oszone.net/showthread.php?t=328950)

romfus 08-08-2017 11:01 2757083

Создание скрипта подсчета по маске и вывода на экран через msg
 
Помогите создать скрипт, скажем есть в папке Z:\Printer\08.08.2017 3 типа файлов имена которых начинаются на "34s_1......" ( иногород) , "34s_400139....."( это область) и "34s40000......." (это город) в формате pdf. Как сделать так чтобы скрипт посчитал количество файлов и вывел на экран через команду msg результат подсчитанных файлов? Я так то разобрался как файлы считаются,а вот как вывести на экран через msg не понятно....
@echo off
DIR Z:\Printer\08.08.2017\34s_1*.*.pdf
pause
DIR Z:\Printer\08.08.2017\34s_400139*.*.pdf
pause
DIR Z:\Printer\08.08.2017\34s_400000*.*.pdf
pause

romfus 08-08-2017 11:19 2757089

то есть вывел не общее количество файлов а именно города столько то файлов области столько то и иногорода столько то файлов

alpap 08-08-2017 11:33 2757093

Код:

@echo off
set "d=Z:\Printer\08.08.2017"
set "m1=34s_1*"
set "m2=34s_400139*"
set "m3=34s_400000*"
set "fe=.pdf"
<nul set /p=иногород=
dir /a-d/b "%d%\%m1%%fe%"|find /c /v ""
<nul set /p=область=
dir /a-d/b "%d%\%m2%%fe%"|find /c /v ""
<nul set /p=город=
dir /a-d/b "%d%\%m3%%fe%"|find /c /v ""
pause>nul


romfus 08-08-2017 11:42 2757095

Работает, а вот если через msg? реально так?

alpap 08-08-2017 11:45 2757096

Покрасивше:
Код:

@echo off
setlocal enabledelayedexpansion
set "d=Z:\Printer\08.08.2017"
set "m1=иногород=34s_1*"
set "m2=область=34s_400139*"
set "m3=город=34s_400000*"
set "fe=.pdf"
for /l %%n in (1 1 3) do for /f "tokens=1* delims==" %%a in ("!m%%n!") do (
 <nul set /p=%%~a=
 dir /a-d/b "%d%\%%~b%fe%"|find /c /v ""
)
pause>nul

с msg:
Код:

@echo off
setlocal enabledelayedexpansion
set "d=Z:\Printer\08.08.2017"
set "m1=иногород=34s_1*"
set "m2=область=34s_400139*"
set "m3=город=34s_400000*"
set "fe=.pdf"
for /l %%n in (1 1 3) do for /f "tokens=1* delims==" %%a in ("!m%%n!") do for /f "delims=" %%z in ('dir /a-d/b "%d%\%%~b%fe%"^|find /c /v ""') do msg * %%~a=%%z
pause>nul


romfus 08-08-2017 11:57 2757100

спасибо большое!

а вот если путь каждый день меняется. Можно ли как то автоматизировать в скрипте это? То есть сегодня путь Z:\Printer\08.08.2017 а завтра будет путь Z:\Printer\09.08.2017

alpap 08-08-2017 12:10 2757103

Допустим:
Z:\Printer\09.08.2017 - Z:\Printer\%date%, если всегда равно текущей или нет?

romfus 08-08-2017 12:11 2757104

да да . Точно. Спасибо. Работает

alpap 08-08-2017 12:14 2757106

если в папке "Z:\Printer" только одна единственная папка с датой, будет правильно работать и такой код:
Код:

@echo off
setlocal enabledelayedexpansion
set "d=Z:\Printer"
set "m1=иногород=34s_1*"
set "m2=область=34s_400139*"
set "m3=город=34s_400000*"
set "fe=.pdf"
for /l %%n in (1 1 3) do for /f "tokens=1* delims==" %%a in ("!m%%n!") do for /f "delims=" %%z in ('dir /a-d/b/s "%d%\%%b%fe%"^|find /c /v ""') do echo %%a=%%z
pause>nul

(поставил echo в вывод, поменяете)

romfus 08-08-2017 12:22 2757108

а можно указать чтоб еще в одной папке искало? то есть еще одну папку добавить для поиска? D:\IVC\Operators\Printer\Повестки\%date% и также по маскам выдавало тоже самое по 2 папкам? только маска будет уже другая 34P_400000*" это город 34P_400139* это область"

нет там не одна папка там много папок с датами

romfus 08-08-2017 13:29 2757119

все разобрался сам)

romfus 08-08-2017 13:46 2757122

alpap, а не подскажешь как разделить мне теперь команды в батнике?

romfus 08-08-2017 14:10 2757125

или разделить разными цветами текста

alpap 09-08-2017 09:31 2757321

Цитата:

Цитата romfus
как разделить »

Цитата:

Цитата romfus
разными цветами текста »

думаю вам хотелось чего-то такого, да и лучше не придумаешь, цветом вообще реально, но в выводе и не просто, а раскраска самого кода зависит от того чем пользуетесь, у меня в AkelPad прекрасно все подсвечивается, причем можно эту подсветку изменять самому - что и сделал.
Код:

@echo off
setlocal enabledelayedexpansion
set "d=Z:\Printer"
set "m1=иногород=34s_1*"
set "m2=область=34s_400139*"
set "m3=город=34s_400000*"
set "fe=.pdf"
rem Делаем перебор значений масок
for /l %%n in (1 1 3) do (
 rem Присваиваем переменной a - имя, переменной b - номер
 for /f "tokens=1* delims==" %%a in ("!m%%n!") do (
  rem В директории Z:\Printer на всю глубину ищем только файлы с нужной маской и передаем в поиск кол-ва строк
  for /f "delims=" %%z in ('dir /a-d/b/s "%d%\%%b%fe%"^|find /c /v ""') do (
  rem Выводим результат на экран в виде имя=количество
  echo %%a=%%z
  )
 )
)
pause>nul


romfus 09-08-2017 13:00 2757364

я имею ввиду чтобы вывод в консоли был цветными буквами например иногород красные область синие и тому подобное

Iska 09-08-2017 15:00 2757381

romfus, хоть это и можно сделать сторонними средствами (ansicon, echox и т.п.), но, на мой взгляд, это уже садомазохизм в утончённой форме. Хотите цвета в консоли — переходите на PowerShell, там есть и консоль, и цвета «искаропки». Да и возможностей на пару порядков больше по сравнению с пакетными файлами.

alpap 09-08-2017 15:49 2757385

romfus,
продолжу Уважаемого Iska и с учетом того что вы хотели вывод в msg, а там уже никак он цветным не будет, используйте тогда специальные утилиты (вместо msg, что тоже утилита) для красочных выводов результатов, коих не мало на просторах и-нета.
Я в свое время пользовался утилитами отсюда, wselect прекрасно в цвете выводит.

romfus 09-08-2017 16:31 2757401

Да msg уже не нужно достаточно консольного варианта вывода

alpap 09-08-2017 19:20 2757422

Цитата:

Цитата romfus
достаточно консольного »

тогда PS проще:
Код:

@echo off
::'Blue','Green','Cyan','Red','Magenta','Yellow','White'
set "m1=иногород=2"
set "m2=область=3"
set "m3=город=1"
powershell "write-host '%m1%' -foregroundcolor 'Magenta'"
powershell "write-host '%m2%' -foregroundcolor 'Yellow'"
powershell "write-host '%m3%' -foregroundcolor 'Cyan'"
pause>nul

надеюсь разберетесь как в основной код поместить.

Iska 09-08-2017 23:35 2757467

alpap, я лично имел в виду — целиком на PowerShell'е сделать.


Время: 22:49.

Время: 22:49.
© OSzone.net 2001-