Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
CMD/BAT - [решено] Проверка существования файла

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


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

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


Задача вот в чем:
имеется следующая структура D:\data\xxxx\mmdd\ и F:\data\xxxx\mmdd\
где
xxxx - различные папки с различными именами соответственно (около 20 штук)
mmdd - папки, имена которых состоят из месяца (mm) и даты (dd)
в этих папках необходимо проверить существование файла, допустим filename.vvv и при наличии такового записать в лог, что все хорошо, а при его отсутствии - все плохо.

перерыл справку по командной строке, перелопалил кучу форумов уже голова пухнет от всего...
Пожалуйста, направите в нужное русло...

Отправлено: 17:39, 08-02-2011

 

Пользователь


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

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


Ничего дельного не скажу. Но. В cmd, наверное, как-то и можно, только не представляю как. Но по-моему, проще в powershell. Он легко может получить список папок в массив. Это как раз то, чего, как мне кажется, не умеет cmd, и что здесь необходимо для навигации по папкам и проверки существования файла. Или умеет, но ректально.
Далее всё должно быть очень просто. Не ленись, возьмись за изучение powershell. Результаты оправдаются. Сам ленился сначала.

Отправлено: 21:43, 08-02-2011 | #2



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

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


Ветеран


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

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


Цитата vilSK:
Пожалуйста, направите в нужное русло... »
Вот вам скрипт на vbs, который решает вашу задачу - и пишет в лог c:\temp\log.txt
Код: Выделить весь код
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
Благодарности: 119

Профиль | Отправить 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
Благодарности: 119

Профиль | Отправить 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
   )
)
Ivan Bardeen, а вот этот цикл не лишний?
Код: Выделить весь код
For Each file In Subfolder.files
  If file.name = "filename.vvv" Then
    objFile.WriteLine "Все хорошо!"
    i=1
    Exit For
  End If
Next
Так?
Код: Выделить весь код
For Each Subfolder in Folder.SubFolders
  objFile.WriteLine "Для папки:" & Subfolder.path
  If FSO.FileExists(Subfolder.Path & "\filename.vvv") Then
    objFile.WriteLine "Все хорошо!"
  Else
    objFile.WriteLine "Все плохо!"
  End If
  ShowSubFolders Subfolder
Next

Последний раз редактировалось SendMessage, 09-02-2011 в 09:20.

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

Отправлено: 09:12, 09-02-2011 | #5


Ветеран


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

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


Цитата SendMessage:
Так? »
Пожалуй так, действительно, зачем прогонять все имена файлов в цикле - если нужно проверить заранее известный

Отправлено: 09:17, 09-02-2011 | #6


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


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

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


Спасибо ребята огромное! Почти то, что надо! Дальше думаю уже до разберусь. "Пинок" в нужном направлении получен и это главное

Отправлено: 10:03, 09-02-2011 | #7


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


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

Профиль | Отправить 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
mmdd - папки, имена которых состоят из месяца (mm) и даты (dd)

Отправлено: 11:06, 10-02-2011 | #8


Старожил


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

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


Цитата vilSK:
как вот его можно оптимизировать, чтобы он искал по следующим путям:
D(F):\videodata\camXX\mmdd,
где
XX - цифровое обозначение от 1 и до 99
mmdd - папки, имена которых состоят из месяца (mm) и даты (dd) »
Ну, наверное, так:
Код: Выделить весь код
for /f "tokens=*" %%a in ('dir /b/ad/s "D:\videodata\" "F:\videodata\" ^| findstr /i/e "\\cam[0-9]*\\[0-1][0-9][0-3][0-9]"')
Не проверял, сразу в пост пишу. Обрати внимание на формат дат в папке - может у тебя по другому.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:00, 10-02-2011 | #9


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


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

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


SendMessage, СПАСИБО тебе ОГРОМНОЕ!
наконец то до меня дошло как регулярные выражения задаются ...

Отправлено: 15:26, 10-02-2011 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход