Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    Проверь, существует ли файл?

    Проверь, существует ли файл?

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Проверь, существует ли файл?, RouterOS
     
    xxcat
    Guest
    #1
    0
    17.08.2006 11:16:00
    Можно ли организовать такую проверку: скрипт проверяет, существует ли файл some_file.rsc в корневой директории, и если да — выполняет какую-то задачу, а если нет — завершается. Спасибо!
     
     
     
    rextended
    Guest
    #2
    0
    12.04.2022 11:21:00
    Я тут кое-что пишу для всех…
     
     
     
    Rugx
    Guest
    #3
    0
    12.04.2022 10:55:00
    Если не обязательно доставлять как можно скорее, то да, конечно.
     
     
     
    Rugx
    Guest
    #4
    0
    12.04.2022 11:26:00
    Простите, пришлось подкорректировать точное название файла, чтобы было type=“.ncfg file”. Но вы, наверное, уже догадались. https://ibb.co/JznpKGQ
     
     
     
    rextended
    Guest
    #5
    0
    12.04.2022 11:30:00
    Если файл существует, сделай что-нибудь. 2 общих случая: а) по точному имени, б) по расширению файла.

    Рассмотрение типов файлов: RouterOS, насколько я помню, знает только эти типы "файлов": disk, directory, backup (.backup), script (.rsc), userman backup (.umb). Остальные - это типы ".расширение файла", например, ".txt файл". Файлы без расширения просто идентифицируются как "файл" по типу, и их нужно искать по имени файла.

    Рассмотрение имени файлов: Если у RB есть Flash-память, файл может находиться в директории /flash/ вместо корневой. Если ищется точное имя файла, необходимо указать и внутренний путь, например, "flash/something.rsc". Эта проблема сохраняется даже если есть другие пути, Flash или NAND не имеют значения. Имя файла не начинается с /.

    Чтобы не запутаться с { }, я использую global для примеров.

    а) Проверка по точному имени: если точное имя существует, сделай что-нибудь, иначе ничего.

    # если файл iphistory.txt может быть в корневой директории
    :global filename "iphistory.txt"
    :global findresult [/file find where name="$filename"]
    :if ([:len $findresult] > 0) do={
       :put "file $filename exist"
    }

    # если файл iphistory.txt может быть во flash или в другой поддиректории
    :global filename "flash/myfiles/iphistory.txt"
    :global findresult [/file find where name="$filename"]
    :if ([:len $findresult] > 0) do={
       :put "file $filename exist"
    }

    Если файл нужно искать везде, игнорируя путь:
    :global filename "iphistory.txt"
    :global findresult [/file find where name~"(^|/)$filename\$"]
    :if ([:len $findresult] > 0) do={
       :put "file $filename exist"
    }

    б) Проверка по расширению файла: если хотя бы один файл с таким расширением существует, сделай что-нибудь, иначе ничего.

    # если расширение не распознано RouterOS
    :global fileext ".txt"
    :global findresult [/file find where type="$fileext file"]
    :if ([:len $findresult] > 0) do={
       :put "found $[:len $findresult] file(s) with $fileext extension"
    }

    # если расширение распознано, например, backup, RouterOS
    :global filetype "backup"
    :global findresult [/file find where type=$filetype]
    :if ([:len $findresult] > 0) do={
       :put "found $[:len $findresult] $filetype file(s)"
    }

    Поиск по расширению файла не везде, а только в определенной поддиректории

    # если расширение не распознано RouterOS
    :global fileext ".txt"
    :global subdir "flash/myfiles/"
    :global findresult [/file find where name~"^$subdir" and type="$fileext file"]
    :if ([:len $findresult] > 0) do={
       :put "found $[:len $findresult] file(s) with $fileext extension inside the folder $subdir"
    }

    # если расширение распознано, например, backup, RouterOS
    :global filetype "backup"
    :global subdir "flash/myfiles/"
    :global findresult [/file find where name~"^$subdir" and type=$filetype]
    :if ([:len $findresult] > 0) do={
       :put "found $[:len $findresult] $filetype file(s) inside the folder $subdir"
    }

    На всех моделях, чтобы инвертировать “сделай, если файлы существуют” в “сделай, если файлы не существуют”, просто замените “> 0” на "= 0"
     
     
     
    Albirew
    Guest
    #6
    0
    29.06.2023 21:44:00
    Аналогично, можно ли проверить, существует ли папка? Хочу проверить, есть ли /flash/ или нет, прежде чем делать свои дела (у некоторых карт она есть, у других — нет).
     
     
     
    diamuxin
    Guest
    #7
    0
    29.06.2023 22:14:00
    Решение в предыдущем посте (спасибо @rextended), попробуй адаптировать его под свои нужды. :global subdir "flash"
    :global findresult [/file find where name~"^$subdir"]
    :if ([:len $findresult] > 0) do={
       :put "найдено $[:len $findresult] папок $subdir существует!"
    } BR.
     
     
     
    abbio90
    Guest
    #8
    0
    25.04.2024 14:53:00
    Как мне найти USB в меню "Файл" и извлечь его путь?
     
     
     
    abbio90
    Guest
    #9
    0
    25.04.2024 15:28:00
    Если $LastRun совпадает с текущей датой, то:
    /file
    Для каждого элемента: найти, где имя содержит "usb" и тип равен "disk"
    Локальная переменная usbName = получить имя элемента
    Локальная переменная usbState

    Если (длина имени usbName) > 0, то:
    usbState = "true"
    Иначе:
    usbState = "false"
    Вывести usbState
     
     
     
    Rugx
    Guest
    #10
    0
    12.04.2022 10:20:00
    Попробуй что-то вроде: `:while ([:len [/file/find where type=ncfg]]=0) do={:delay 1}; :put "File with .ncfg is present" *отредактировано, чтобы уменьшить нагрузку на процессор, добавлена задержка 1`
     
     
     
    changeip
    Guest
    #11
    0
    17.08.2006 15:44:00
    Если найдено хотя бы один файл с именем someconfig.rsc, выводится сообщение "FOUND IT". Помогает это? Сэм.
     
     
     
    xxcat
    Guest
    #12
    0
    17.08.2006 18:19:00
    Да! Огромное спасибо!
     
     
     
    jvolkhausen
    Guest
    #13
    0
    22.04.2020 08:19:00
    Спасибо и мне тоже. Очень помогает после кучи потраченного времени.
     
     
     
    ariosvelez
    Guest
    #14
    0
    11.04.2022 21:25:00
    Мне нужно, чтобы этот скрипт запускался только если существует файл с расширением .ncfg. Я уже нашел способ находить файлы по расширению, у меня это уже есть, просто нужно сделать это, если файл существует. /tool e-mail send to=“myemail@domain.com” subject=“just for you” file=[/file find where name~“.ncfg$”]
     
     
     
    rextended
    Guest
    #15
    0
    11.04.2022 21:35:00
    Команда отправляет все файлы с именем длиной не менее 5 символов и оканчивающиеся на "ncfg" (буквально). Примеры: xncfg, thisisnotdotncfg, micio.miaoncfg, noncfg, any.name.noextncfg. Вместо этого отправляются только файлы с именем, оканчивающимся на .ncfg.
     
     
     
    rextended
    Guest
    #16
    0
    12.04.2022 10:41:00
    Я не думаю, что "бесконечный" цикл лучше с точки зрения потребления CPU, чем выполнение чего-то по расписанию... и еще: [/file/find where type=ncfg] никогда не работает. Прежде чем что-то выкладывать, лучше протестировать, правда?
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры