Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 4

Автор: Wise_Kaa
Дата сообщения: 07.02.2008 15:48
Друзья, а как можно подсчитать кол-во файлов в папке?
пробовал так

Цитата:

set counter=0
for %%T in (*.*) do set /a counter=%counter%+1
echo %counter%

Значение counter равно 1.
Автор: wolf0425
Дата сообщения: 07.02.2008 16:16

Цитата:
Друзья, а как можно подсчитать кол-во файлов в папке?

если файлов много, то лучше так: for /f %%a in ('dir /b /a-d ^| find /c /v ""') do set "counter=%%a"
проследить за правильными ключиками у dir - на предмет правильного учета/игнорирования скрытых файлов.

а у тебя проблема в том, что в do set /a counter=%counter%+1
%counter% раскрывается при инициализации цикла, а не на каждом проходе.
в твоем варианте писать надо было или
Код: for %%T in (*.*) do set /a counter+=1
Автор: king_stiven
Дата сообщения: 07.02.2008 16:58
Joolz
Приведи примеры текстовых файлов все варианты.
01MDM
Скорость твоего батника впечатляет.

Добавлено:
Wise_Kaa

Код: @echo off
for /f "tokens=*" %%c in ('dir /b /a:-d') do set /a counter+=1
echo %counter%
Автор: Wise_Kaa
Дата сообщения: 07.02.2008 17:52
wolf0425
Спасибо большое.
Автор: gamebit73
Дата сообщения: 08.02.2008 04:45
Есть задача. Имеется папка с файлами логов *.log. Надо узнать дату последнего изменения всех файлов, узнать какие изменены сегодня и получить их имена для последующего отправления по e-mail. Отправку осуществляю программой zerat.
Автор: king_stiven
Дата сообщения: 08.02.2008 05:25
gamebit73
В папке E:\split 1\ лежат логи

Код: @echo off
for /f "usebackq tokens=*" %%c in (`dir "E:\split 1\*.log" /t:w /o:-d /a:-d /b`) do (
for /f "tokens=1*" %%d in ("%%~tc") do (
if "%%d"=="%date%" (
echo E:\split 1\%%c>> 1.txt
) else (
сюда написать команду для отправкам списка из 1.txt по e-mail
goto :eof
)
)
)
Автор: gamebit73
Дата сообщения: 08.02.2008 06:03
king_stiven
Странно, у меня не формируется файл 1.txt.
Вот я немного подправил под себя:

Код:
for /f "tokens=*" %%c in ('dir f:\log\*.log /t:w /o:-d /a:-d /b') do (
for /f "tokens=1*" %%d in ("%%~tc") do (
if "%%d"=="%date%" (
echo %%c > c:\backup\1.txt
) else (
%PWD%zeratssl\zerat smtphost:boggk.ru from:niv@boggk.ru to:niv1@boggk.ru subject:"Log" %%PUT="c:\backup\1.txt"
goto :eof
)
)
)
Автор: king_stiven
Дата сообщения: 08.02.2008 06:23
gamebit73
Исправленный код работает. Чтобы отправить сами лог-файлы на почту надо знать справку по zerat на русском. У меня её нет.

Цитата:
echo %%c > c:\backup\1.txt
это ошибка, будет только один файл из списка.


Добавлено:
В шапке, в Полезные утилиты есть для работы с почтой.
Автор: gamebit73
Дата сообщения: 08.02.2008 07:26
king_stiven
Все равно не хочет...
вот что выводит:

Код:
C:\backup>for /F "tokens=*" %c in ('dir f:\log\*.log /t:w /o:-d /a:-d /b') do (f
or /F "tokens=1*" %d in ("%~tc") do (if "%d" == "08.02.2008" (echo %c 1>>c:\bac
kup\1.txt ) else (
C:\backup\zeratssl\zerat smtphost:boggk.ru from:niv@boggk.ru t
o:niv1@boggk.ru subject:"Log" %PUT="C:\backup\1.txt"
goto :eof
) ) )

C:\backup>(for /F "tokens=1*" %d in ("") do (if "%d" == "08.02.2008" (echo ddoos
boges.log 1>>c:\backup\1.txt ) else (
C:\backup\zeratssl\zerat smtphost:boggk.ru from:niv@boggk.ru t
o:niv1@boggk.ru subject:"Log" %PUT="C:\backup\1.txt"
goto :eof
) ) )
Автор: Ilyansk
Дата сообщения: 08.02.2008 09:28
хотел поместить в шапку в раздел "работа с датой...", а попало сюда :/
батник расчета длительности процессов
Может кому интересно, батник расчета длительности процессов, выдающий результат на экран в виде часов минут секунд. Десятые доли секунд не учитывет. Работает - если время окончания (HH:MM:SS[.DD]) БОЛЬШЕ времени начала. У себя использую для расчета времени создания резервной копии. Батник копии стартует в 0:10 и первой строкой пишет время в файл _start.txt (%time% > _start.txt), по окончании соответственно в _finish.txt Есть еще батник проверки результатов (сравнивает даты и пр.), туда и встроены строки

Код: for /f "tokens=2 delims= " %%Q in (f:\archive\_start.txt,f:\archive\_finish.txt) do call :coll %%Q
call calc_time !t1! !t2!
goto :eof
:coll
set /a i+=1 & set t!i!=%1
goto :eof
Автор: king_stiven
Дата сообщения: 08.02.2008 10:05
gamebit73
for %%c in ("любой файл") do echo %%~tc
что выдаёт?

попробуй ещё раз мой вариант без изменений, заменив только пути.
Также помогает

chcp 1251 > nul

на второй строчке
Автор: Joolz
Дата сообщения: 08.02.2008 10:07
Упрощу задачу.
Есть файл вида:

MS Office 2003
Acrobat Reader 5.0
Opera 8.5
Windows Installer 3.1
Opera 8.5
Adobe InDesign CS3
MS Office XP
MS Office XP
Opera 9.02
Acrobat reader 5.0
MS Offise 2003
Total Commander
Opera 8.5
Adobe InDesign CS3


Нужно из него получить файл вида:

MS Office 2003 - 2
Acrobat Reader 5.0 - 2
Opera 8.5 - 3
Windows Installer 3.1 -1
Adobe InDesign CS3 -2
MS Office XP -2
Opera 9.02 -1
Total Commander -1

Где правый столбик - это количество повторений идентичных строчек из первого файла.

Понимаю что все очень просто но как-то не получается у меня.
Автор: wolf0425
Дата сообщения: 08.02.2008 10:29
интересно, народ когда-нибудь научится элементарно тестировать свои выкладываемые батники или хотя бы писать их без очевидных ошибок?

Ilyansk, calc_time.bat 08:08:08 09:09:09 должен не падать,
а calc_time.bat 18:18:18 19:19:19 должен выдавать время в 1 час с копейками - а не 7минут 1сек, как сейчас...

правильно секунды вычисляются например так:
Код: :msec
set /a SEC%1=1%2 * 3600 + 1%3 * 60 + 1%4 - 366100
goto :eof
Автор: king_stiven
Дата сообщения: 08.02.2008 11:30
Joolz

Код: @echo off
setlocal enabledelayedexpansion
for /f "usebackq tokens=*" %%c in ("1.txt") do (
for /f "usebackq tokens=*" %%d in ("2.txt") do (
if "%%c"=="%%d" set povtor=yes
)
if not defined povtor (
set "program=%%c"
echo %%c>>2.txt
call :spisok
)
set povtor=
)
goto :eof
:spisok
for /f "usebackq tokens=*" %%e in ("1.txt") do if "%%e"=="%program%" set /a count+=1
echo %program% -!count!>>3.txt
set count=
Автор: timex
Дата сообщения: 08.02.2008 11:42
Привет всем!

Реальная задача для программиста.
Часть её, основывающаяся на bat-скрипте, описывается так.

Существует какой-то файл (например ver.h или version.h), следующего содержания:

Код:
/*
любое колисчество строк
*/
// любое количество таких строк (начинающихся с "//")
#define build_number 1
Автор: Joolz
Дата сообщения: 08.02.2008 11:59
king_stiven
Спасибо!
На приведенном здесь фрагменте отработал отлично, на более длинном списке начал затыкаться. Замена %program% на !program! помогла.
Автор: Ilyansk
Дата сообщения: 08.02.2008 13:07
ой-ой-ой!!!! полного тестирования не провел
прошу прощения...
а можно свои посты изымать? аж стыдно ...
Автор: Grim_Repo
Дата сообщения: 08.02.2008 13:52
сорри за но я не нашел тему где можно задать данный вопрос:
запустится ли *.bat файл с помощью autorun.ini с CD. Код такой:
Код: [autorun]
OPEN=start.bat
ICON=desktop.ico
Автор: 01MDM
Дата сообщения: 08.02.2008 14:24
timex

Код:
@echo off
setlocal

set build=# define build_number
for /f "tokens=1-4" %%1 in ('type ver.h ^| findstr /c:"%build%"') do (
set num=%%4
set "build=%build% %%4"
set "newbuild=%%1 %%2 %%3"
)
set /a num+=1

gsar -s"%build%" -r"%newbuild% %num%" ver.h new_ver.h

:: или если перезаписать исходный файл
gsar -s"%build%" -r"%newbuild% %num%" -o ver.h
Автор: gamebit73
Дата сообщения: 11.02.2008 04:15
king_stiven

Цитата:
for %%c in ("любой файл") do echo %%~tc
что выдаёт?

C:\backup>for %c in ("1.txt") do echo %~tc
C:\backup>echo 11.02.2008 08:57
11.02.2008 08:57
Автор: Ilyansk
Дата сообщения: 11.02.2008 05:54
01MDM

Цитата:
Grim_Repo
Open в autoun.inf на флешке работать не будет.


а что будет, только вирусы?
Автор: batniki
Дата сообщения: 11.02.2008 06:36
Помогите пожалуйста решить след. задачу:
Нужно проверить на компе определенный порт если он занят - то открыть программу 1, если свободен то открыть программу 2.
Автор: 01MDM
Дата сообщения: 11.02.2008 07:09
Ilyansk

Цитата:
а что будет, только вирусы?

Не понял вопроса?
Пункт Open=program.exe в autorun.inf на usb-flash работать не будет. Как запускаются вирусы не знаю, наверное через Shell/command
Автор: king_stiven
Дата сообщения: 11.02.2008 07:32
gamebit73

Код: @echo off
for /f "usebackq tokens=*" %%c in (`dir "E:\split 1\*.log" /t:w /o:-d /a:-d /b`) do (
for /f "tokens=1*" %%d in ("%%~tc") do (
if "%%d"=="%date%" (
echo E:\split 1\%%c>> 1.txt
set Mail=yes
) else (
if defined Mail сюда написать команду для отправкам списка из 1.txt по e-mail
if not defined Mail echo файлов для почты нет!
goto :eof
)
)
)
Автор: Elroir
Дата сообщения: 11.02.2008 09:41
batniki
Порт TCP или UDP?
Автор: Ilyansk
Дата сообщения: 11.02.2008 10:47
01MDM,
извините - эмоции. Grim_Repo поинтересовался можно ли автоматом запустить батник с флэшки и, как выяснилось - достуного и легкого пути нет, тем не менее вирусы победно шествуют широкими шагами посредством флэшек, великолепно с них запускаяясь без ведома вставляющего... А ведь заманчиво написать синхронизационный батник (у меня, кстати, такой готов) и не париться с его запуском при вставке флэшки для перекрестного обновления данных, что у меня так и не получилось.
Я просто надеялся, что Вы более меня просвещены не толко в вопросах написания батников, но и в способах их запуска. Извините за офф-топ и флейм
Автор: 01MDM
Дата сообщения: 11.02.2008 11:12
Ilyansk
Если честно, то я не знаю как автоматом запустить какую-нибудь программу или скрипт с флешки стандартным способом при ее монтировании. Я искал подобную информацию, но ничего не нашел.. Если ее открывать даблкликом то здесь все просто, а вот при ее присоединении.. хз

Это скорее в раздел для программистов, и решается на другом уровне взаимодействия с os.
Автор: Elroir
Дата сообщения: 11.02.2008 11:48
Ilyansk
В autorun.inf на флэшке, можно прописать такую команду:

Код:
[autorun]
OPEN=start.bat
ICON=desktop.ico
ACTION=Start the synchronization
Автор: Akam1
Дата сообщения: 11.02.2008 14:03
Посоветуйте, пожалуйста, как решить или ткните где посмотреть.
Задача - сделать автообмен УРИБ 1С 8.1 через почту не стандартными ее средствами.
Доделан автообмен 1С так, чтобы сначала он загружал определенный файл, потом делал выгрузку в файл (это пока стандартными способами), а далее запускается bat-файл. В данном файле запускается программа The Bat! с параметрами на создание письма, прикрепление к нему файла и отправки на определенный адрес, далее закрытие программы. Если запускать bat-файл вручную, то все хорошо, письмо создается, отправляется, потом все закрывается. Если же запускать из 1С (запустив процесс обмена), то видно, что в процессах появляется cmd.exe и thebat.exe запущенные в фоне от моего имени, через пару секунд они исчезают, но письмо не создается и ничего не отправляется. Странно, ведь запускается одно и то же, только одно вручную, а другое - запуском bat из 1С. Что делать?
Или может есть какое-нибудь решение отправки почты с помощью простых bat-файлов или еще каких-нибудь скриптов, не используя почтовую программу?
Автор: batniki
Дата сообщения: 11.02.2008 14:35
Помогите пожалуйста решить след. задачу:
Нужно проверить на компе определенный порт если он занят - то открыть программу 1, если свободен то открыть программу 2.

Elroir
UDP

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

Предыдущая тема: Доступ к реестру через RegEdit?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.