![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Проверка существования файла |
|
|
CMD/BAT - [решено] Проверка существования файла
|
Новый участник Сообщения: 6 |
Задача вот в чем:
имеется следующая структура D:\data\xxxx\mmdd\ и F:\data\xxxx\mmdd\ где xxxx - различные папки с различными именами соответственно (около 20 штук) mmdd - папки, имена которых состоят из месяца (mm) и даты (dd)в этих папках необходимо проверить существование файла, допустим filename.vvv и при наличии такового записать в лог, что все хорошо, а при его отсутствии - все плохо. перерыл справку по командной строке, перелопалил кучу форумов уже голова пухнет от всего... Пожалуйста, направите в нужное русло... |
|
Отправлено: 17:39, 08-02-2011 |
Пользователь Сообщения: 96
|
Профиль | Отправить PM | Цитировать Ничего дельного не скажу. Но. В cmd, наверное, как-то и можно, только не представляю как. Но по-моему, проще в powershell. Он легко может получить список папок в массив. Это как раз то, чего, как мне кажется, не умеет cmd, и что здесь необходимо для навигации по папкам и проверки существования файла. Или умеет, но ректально.
Далее всё должно быть очень просто. Не ленись, возьмись за изучение powershell. Результаты оправдаются. Сам ленился сначала. |
Отправлено: 21:43, 08-02-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1001
|
Профиль | Отправить PM | Цитировать Цитата vilSK:
Const ForAppending = 8 i=0 Set FSO = CreateObject("Scripting.FileSystemObject") Set objFile = FSO.CreateTextFile("C:\temp\Log.txt", ForAppending, TRUE) ShowSubFolders FSO.GetFolder("D:\data") ShowSubFolders FSO.GetFolder("F:\data") Sub ShowSubFolders(Folder) For Each Subfolder in Folder.SubFolders objFile.WriteLine "Для папки:" & Subfolder.path For Each file In Subfolder.files If file.name = "filename.vvv" Then objFile.WriteLine "Все хорошо!" i=1 Exit For End If Next If i =0 Then objFile.WriteLine "Все плохо!" End If i=0 ShowSubFolders Subfolder Next End Sub |
|
Отправлено: 23:19, 08-02-2011 | #3 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Батником самый экономный:
@echo off dir /b/a-d/s "D:\data\filename.vvv" "F:\data\filename.vvv" && echo Good! > log.txt || echo Bad! > log.txt Цитата Spooner:
![]() Вполне себе орально умеет. |
|
Отправлено: 05:41, 09-02-2011 | #4 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Сейчас подумал - наверное, надо в каждой папке чтобы был файл.
Тогда так: @echo off for /f "tokens=*" %%a in ('dir /b/ad/s "D:\data" "F:\data"') do ( if /i exist %%a\filename.vvv ( echo в папке %%a - файл есть >> log.txt ) else ( echo в папке %%a - файлa нет >> log.txt ) ) For Each file In Subfolder.files If file.name = "filename.vvv" Then objFile.WriteLine "Все хорошо!" i=1 Exit For End If Next |
|
Последний раз редактировалось SendMessage, 09-02-2011 в 09:20. Отправлено: 09:12, 09-02-2011 | #5 |
Ветеран Сообщения: 1001
|
Профиль | Отправить PM | Цитировать Цитата SendMessage:
|
|
Отправлено: 09:17, 09-02-2011 | #6 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Спасибо ребята огромное! Почти то, что надо! Дальше думаю уже до разберусь. "Пинок" в нужном направлении получен и это главное
![]() |
Отправлено: 10:03, 09-02-2011 | #7 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать В общем то все работает, и практически как надо, но есть небольшое "но"
в лог включаются папки с прошлыми датами, а этого как бы и не надо... Имеется следующий код: @echo off setlocal set _fn=*%date:~-4%%date:~3,2%%date:~0,2%*.avi set _log=video_surve.log set _errlog=video_surve_error.log set _i=0 set smtp=192.168.200.2 set from=xxxx@xxxx.ru set to1=xxxx@xxxx.ru set to2=xxxx@xxxx.ru set mess=VideoServer-%computername%-OK! set err_mess=VideoServer-%computername%-ERROR! if exist %_log% del %_log% if exist %_errlog% del %_errlog% echo Дата: %date% Время: %time% Сервер: %computername% >> %_log% echo. >> %_log% echo Дата: %date% Время: %time% Сервер: %computername% >> %_errlog% echo. >> %_errlog% for /f "tokens=*" %%a in ('dir /b/ad/s "D:\videodata\" "F:\videodata\"') do ( if /i exist %%a\%_fn% ( echo в папке %%a - есть следующие файлы: >> %_log% dir /b %%a >> %_log% set /a _i=%_i%+1 ) else ( echo в папке %%a - файлов за %date% НЕТ >> %_errlog% ) ) if %_i%==0 ( postie.exe -host:%smtp% -s:%err_mess% -to:%to1% -from:%from% -charset:Windows-1251 -file:%_errlog% -log:log_mail.txt -v postie.exe -host:%smtp% -s:%err_mess% -to:%to2% -from:%from% -charset:Windows-1251 -file:%_errlog% -log:log_mail.txt -v ) if %_i%==1 ( postie.exe -host:%smtp% -s:%mess% -to:%to1% -from:%from% -charset:Windows-1251 -file:%_log% -log:log_mail.txt -v postie.exe -host:%smtp% -s:%mess% -to:%to2% -from:%from% -charset:Windows-1251 -file:%_log% -log:log_mail.txt -v ) endlocal D(F):\videodata\camXX\mmdd, где XX - цифровое обозначение от 1 и до 99 |
Отправлено: 11:06, 10-02-2011 | #8 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Цитата vilSK:
Не проверял, сразу в пост пишу. Обрати внимание на формат дат в папке - может у тебя по другому. |
|
Отправлено: 15:00, 10-02-2011 | #9 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать SendMessage, СПАСИБО тебе ОГРОМНОЕ!
наконец то до меня дошло как регулярные выражения задаются ![]() |
Отправлено: 15:26, 10-02-2011 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - Проверка существования файла | admin-nsk | Скриптовые языки администрирования Windows | 3 | 13-10-2010 12:25 | |
CMD/BAT - Скачивание файла и проверка на отличия от файла на сервере. | maslovt | Скриптовые языки администрирования Windows | 2 | 08-05-2010 19:54 | |
WMI filter проверка существования файла | farlow | Microsoft Windows NT/2000/2003 | 1 | 30-08-2007 09:17 | |
xsl проверка существования тега в xml | FADE | Вебмастеру | 3 | 23-04-2007 11:29 |
|