Показать полную графическую версию : Создание скрипта подсчета по маске и вывода на экран через 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
то есть вывел не общее количество файлов а именно города столько то файлов области столько то и иногорода столько то файлов
@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
Работает, а вот если через 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 (
<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
спасибо большое!
а вот если путь каждый день меняется. Можно ли как то автоматизировать в скрипте это? То есть сегодня путь Z:\Printer\08.08.2017 а завтра будет путь Z:\Printer\09.08.2017
Допустим:
Z:\Printer\09.08.2017 - Z:\Printer\%date%, если всегда равно текущей или нет?
да да . Точно. Спасибо. Работает
если в папке "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 в вывод, поменяете)
а можно указать чтоб еще в одной папке искало? то есть еще одну папку добавить для поиска? D:\IVC\Operators\Printer\Повестки\%date% и также по маскам выдавало тоже самое по 2 папкам? только маска будет уже другая 34P_400000*" это город 34P_400139* это область"
нет там не одна папка там много папок с датами
alpap, а не подскажешь как разделить мне теперь команды в батнике?
или разделить разными цветами текста
как разделить »
разными цветами текста »
думаю вам хотелось чего-то такого, да и лучше не придумаешь, цветом вообще реально, но в выводе и не просто, а раскраска самого кода зависит от того чем пользуетесь, у меня в 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, хоть это и можно сделать сторонними средствами (ansicon, echox и т.п.), но, на мой взгляд, это уже садомазохизм в утончённой форме. Хотите цвета в консоли — переходите на PowerShell, там есть и консоль, и цвета «искаропки». Да и возможностей на пару порядков больше по сравнению с пакетными файлами.
romfus,
продолжу Уважаемого Iska и с учетом того что вы хотели вывод в msg, а там уже никак он цветным не будет, используйте тогда специальные утилиты (вместо msg, что тоже утилита) для красочных выводов результатов, коих не мало на просторах и-нета.
Я в свое время пользовался утилитами отсюда (http://www.horstmuc.de/wcon.htm), wselect прекрасно в цвете выводит.
Да msg уже не нужно достаточно консольного варианта вывода
достаточно консольного »
тогда 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
надеюсь разберетесь как в основной код поместить.
alpap, я лично имел в виду — целиком на PowerShell'е сделать.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.