Запись в файл в bat: CMD/BAT Поиск строк и запись в файл

bat файлы записи смс в файл

Для сохранение входящих и отправленных смс в файл в программе nhsms можно использовать командные файлы (bat файлы).

Командные файлы прописываются в конфигурации nhsms и автоматически вызываются при отправке/приёме смс.

Эта функция будет полезна:

  • для записи смс, отправленных в режиме базы данных (режим базы данных присутствует, начиная с версии nhsms v3.0.0), так как встроенная запись в файл работает только в режиме без базы данных
  • для записи смс в каком-то определённом формате файла

Далее приводятся примеры bat файлов и информация, как их добавить в конфигурацию nhsms.

Обработка отправленных смс

Написание командного файла

Командный файл запускается программой nhsms, и параметры сообщения доступны в виде переменных среды окружения (environment).

Например, проверить тип смс можно используя переменную sms_type:

rem Обрабатываем только исходящие СМС
if not "%sms_type%" == "SMS-SUBMIT" exit /b 0

Переменная sms_resultcode даёт возможность проверить результат отправки, чтобы обработать только смс с ошибками:

rem Обрабатываем только смс с ошибками отправки
if not "%sms_type%" == "SMS-SUBMIT" exit /b 0
if "%sms_resultcode%" == "0" exit /b 0
rem дальнейшая обработка. ..

Запись смс в файл в одну строку на сообщение можно организовать перенаправлением echo вывода переменных
sms_phone,
sms_messagetext,
sms_senttime,
sms_id,
sms_ResultCode:

rem Запись в файл в одну строку
echo "%sms_phone%" "%sms_messagetext%" "%sms_senttime%" "%sms_id%" "%sms_ResultCode%" >> sms-submit.txt

Запись смс в формате INI файла — один параметр на строку:

rem Запись в файл в формате INI файла
echo [%sms_id%] >> sms-submit-ini-format.txt
echo Phone=%sms_phone% >> sms-submit-ini-format.txt
echo Text=%sms_messagetext% >> sms-submit-ini-format.txt
echo SentTime=%sms_senttime% >> sms-submit-ini-format.txt
echo ResultCode=%sms_ResultCode% >> sms-submit-ini-format.txt
echo. >> sms-submit-ini-format.txt

Командный файл даёт гибкость обработки информации, например, можно сохранять в разные файлы в зависимости от номера телефона, результата отправки и т. д. Для этого можно просто формировать имя файла из тех же переменных

echo %sms_messagetext% > "%sms_phone%.txt"

Прописывание командного файла в конфигурации nhsms

Созданный bat/cmd файл необходимо прописать в активной конфигурации программы nhsms, для этого необходимо в редакторе конфигурации открыть страницу Исходящие сообщения и добавить команду запуска.

Если указать просто путь и имя bat/cmd файла, то выходная информация будет записана в кодировке OEM — для русской Windows это кодировка 866.

Чтобы файлы писались в Unicode, необходимо записать команду с ключами /u /c (подробнее см. В bat файле вывести текст в Unicode):

cmd.exe /u /c scripts\save_to_text\sms-submit.cmd

Запись считанных смс

Написание командного файла

Параметры сообщения доступны в виде переменных среды окружения (environment).

Необходимо проверять тип принятого сообщения, потому что это может быть как смс, так и отчёт о статусе сообщения.

rem Обрабатываем только входящие СМС
if not "%sms_type%" == "SMS-DELIVER" exit /b 0

Можно отфильтровать определенного отправителя с помощью sms_sender, например, номер, используемый для тестирования:

rem Пример: фильтрация отправителя по номеру
if not "%sms_sender%" == "79161111111" exit /b 0

Запись в файл производится командой echo с оператором перенаправления в файл. Этот пример показывает запись входящих сообщений в общий файл в виде списка, по одному сообщению на строку. Такой файл удобен для просмотра, но для машинной обработки не очень подходит, потому что нет отметки, обработана ли строка.

rem Пример: сохранение в общий файл
echo %sms_senttime% %sms_sender% "%sms_messagetext%" >> sms-deliver.txt

Для записи каждого сообщения в отдельный файл также используется перенаправление echo в файл, но для каждого сообщения формируется свой файл, называемый по дате/времени и номеру отправителя. Этот вариант не так удобен для просмотра, зато он удобнее для обработки входящих файлов — какая-то программа или скрипт обрабатывает файлы по очереди и удаляет их.

rem Пример: сохранение каждого смс в отдельный файл, по дате/времени и номеру
echo %sms_messagetext% > "%sms_senttime_year%-%sms_senttime_month%-%sms_senttime_day% %sms_senttime_hour%-%sms_senttime_min%-%sms_senttime_sec% %sms_sender%. txt"

Можно добавить в bat файл проверку переменной sms_messagetext и, в зависимости от текста входящего смс, выполнять ту или иную команду:

rem Примеры: проверка текста сообщения
if "%sms_messagetext%" == "Restart" nhss -r
if "%sms_messagetext%" == "Rebuild" start D:\Dev\rebuild.cmd

Прописывание командного файла в конфигурации nhsms

Созданный bat/cmd файл необходимо прописать в активной конфигурации программы nhsms, для этого необходимо в редакторе конфигурации открыть страницу Входящие сообщения и добавить команду запуска.

Если указать просто путь и имя bat/cmd файла, то выходная информация будет записана в кодировке OEM — для русской Windows это кодировка 866.

Чтобы файлы писались в Unicode, необходимо записать команду с ключами /u /c (подробнее см. В bat файле вывести текст в Unicode):

cmd.exe /u /c scripts\save_to_text\sms-submit.cmd

Файлы для скачивания

cmd файлы в zip

См. также

В bat файле вывести текст в Unicode

bat файлы записи смс в файл


Метки: bat    nhsms

Как объединить txt-файлы в один: программы, bat и cmd | IT S.

W.A.T.

Здравствуйте, друзья. В последнее время вы меня часто спрашиваете, как объединить txt файлы в один. О том на сон грядущий и поговорим (не знаю, как у вас, а у меня за окном уже стемнело). Вдохновившись, я подобрал для вас несколько самых простых и действенных способов для Windows и прочих операционных систем.

Объединить небольшие txt-файлы в один большой документ можно разными способами — посредством написания скриптов в бат-файлах или команд в cmd-строке. А также на помощь придут всевозможные программы.

Конкатенация

Среди огромного количества поступивших на данную тему обращений имелся и вопрос: «что такое конкатенация текстовых файлов?» Конкатенация (звучит загадочно, правда) – это не что иное, как объединение нескольких документов заданного формата в один, то есть последовательный перенос содержимого всех документов в один с расположением непосредственно друг за другом.

Представьте, у вас имеется много txt файлов (чтобы вникнуть в суть рассмотрим на примере 3):

  1. В первом написано МАМА.
  2. Во втором – ПАПА.
  3. А в третьем – Я.

После проведения конкатенации вы получите всего один документ с текстом МАМАПАПАЯ, что и является сутью всего процесса. Конечно, правильно подобранные решения достижения поставленных целей подразумевают возможность добавления между добавленными фрагментами разделителей – пробелов или строк.

Возникает резонный вопрос «зачем это нужно?». Например, объединить главы, расположенные в отдельных файлах, в одну книгу. Или собрать ежемесячные отчёты в один годовой. Ситуаций может быть бесчисленное множество.

Windows

Сначала расскажу, как объединить несколько имеющихся файлов txt в один в родном и привычном многим Windows. Затем кратко остановимся на решениях и для некоторых других ОС. Итак, в системе, рождённой корпорацией «Майкрософт», есть несколько способов быстро соединить все заданные файлы-кусочки в один целый текстовый «пирог».

Онлайн-сервисы

Самый беспроблемный способ объединить требуемые файлы формата txt в один файл, на мой взгляд, это воспользоваться одним из многочисленных онлайн-сервисов. Мной опробован и положительно оценён ресурс Filesmerge, функционал которого позволяет склеивать не только «текстовики», но и JPG, PDF, Word и Excel-файлы. А уж txt-пироги можно получить не только из исходников того же формата, но и из text, lst, log, euc, me, err, ans, dsc, asc и eml-кусочков (мог пару форматов пропустить). Для объединения нужно:

  1. Выбрать файлы с компьютера или интернета, для чего предусмотрены соответствующие окошки.
  2. Настроить нюансы объединения в виде добавления суффиксов, префиксов и разделителей, а также подтверждения выходного формата.

Bat-файл

Предложения онлайн-сервисов хотя и соблазняют своей простотой, но для меня они не интересны, так как я предпочитаю решать задачи своими силами. В данном случае мне интереснее объединить разрозненные txt-файлы в один общий посредством создания bat-файла с соответствующей командой. Например, так:

  1. Дано: 2 файла – 1.txt и 2.txt.
  1. В первом имеется содержимое МАМА.
  1. Во втором – ПАПА.
  1. Создаём ещё один текстовый файл (назову его 9.txt) посредством стандартного средства Windows под названием «Блокнот».
  1. Вписываем в него команду:

@echo off

echo:>9.txt

copy /b 1.txt + 2.txt ITOG.txt

del /q 9.txt

    1. Через «Файл» сохраняем документ как 9.bat.
  1. Закрываем «Блокнот» и видим, что в папке появился «батник» с именем 9.bat.
  1. Запускаем его и пожинаем плоды в виде исчезнувшего 9.txt и появившегося ITOG.txt.
  1. Раскрываем ITOG.txt и обнаруживаем слияние двух текстов МАМАПАПА.

Скрипт, написанный нами, командует системе выполнить задание из 9.txt, а именно сложить содержимое 1 и 2.txt, записать его в ITOG.txt, а 9.txt удалить по завершении.

Слияние файлов через bat-документы довольно простое и интересное занятие, если знать команды для скриптов. Возможны такие варианты написания:

  1. Тот же результат: copy *.txt all.txt
  1. Разделит на части:

@echo off

(

type 1.txt

echo:

type 2.txt

)>final.txt

Открыв final.txt, полученный по последнему скрипту, мы с вами увидим содержимое исходников, написанное столбиком.

Уверен, что профи в данной области могли бы написать множество скриптов, но тех, что я привёл уже вполне достаточно для достижения цели.

Командная строка

Любителям «командовать» системе однозначно будет интересно, как соединить всё те же текстовые (txt) файлы при помощи командной строки. Хочу отдельно отметить (для тех кто спрашивал), MS DOS – это внутренняя среда «Виндовс» и все действия в ней выполняются через командную строку (означает, такой способ подходит и для вас тоже). Для того чтобы объединить txt файлы в один необходимо запустить окно той самой строки, набрав в «Выполнить» (найдётся в «Пуске») сочетание cmd.

В результате должно появиться чёрное окно с предложением системы ввести команду, что мы и будем далее делать.

Команда простая, она включает в себя ДЕЙСТВИЕ ПУТЬ К 1 ФАЙЛУ + ПУТЬ КО 2 ФАЙЛУ ПУТЬ К РЕЗУЛЬТАТУ. У меня файлы 1 и 2.txt находятся на диске E, туда же хочу поместить и результат, поэтому пишем copy E:\1.txt + E:\2.txt E:\3.txt

Для подтверждения действия нажимаем на Enter и видим отчёт об удачном выполнении задания.

Для проверки результата я зайду на диск E, а вы по тому пути, который указали в команде. В итоге я увидел новый документ 3.txt, а в нём объединённое содержимое заданных файлов. А у вас получилось? (напишите в комментариях).

Друзья, если вы предпочитаете работать в Powershell, то и там вы легко сможете объединить текстовые файлы той же командой, но с небольшим добавлением cmd /c copy E:\1.txt + E:\2.txt E:\3.txt

После подтверждения действия «Энтером» результат не заставит себя долго ждать.

Программы

Понимаю, что далеко не все пользователи разделяют мою тягу к прописыванию команд и скриптов, а потому я приготовил для вас альтернативные способы, а именно посредством всевозможного софта – специальных программ, файловых менеджеров и текстовых редакторов.

Менеджеры

Я получал много сообщений о том, какой удобный, прекрасный и многофункциональный менеджер Total Commander (признаюсь, недолюбливаю), вот и им тоже можно не напрягаясь соединить txt файлы в один:

  1. Выделить первый «кусочек» в папке.
  2. Зайти в меню «Файл» и запустить действие «Собрать…» (в старых версиях «Склеить»).
  3. Указать путь к будущему «пирогу» и нажать OK.

Мне больше по душе Far Manager, поэтому дальше я расскажу, как объединить файлы в нём. Чтобы склеить файлы при помощи менеджера Far, нужно:

  1. Выделить исходники.
  2. Нажать клавишу F5.
  3. Придумать и написать имя будущего документа.
  4. Из списка существующих файлов выбрать значение «Добавить».
  5. Подтвердить клавишей Enter.
Программы

Друзья, для начала коротко о Notepad ++, в нём также можно объединить файлы, но для этого придётся установить специальный плагин Combine. Он позволит склеить выбранные «кусочки», добавить им имена и вставить между ними строки.

Много хорошего могу сказать о программе TXTcollector. Она помогает комфортно добиться желаемого, но её придётся инсталлировать на ПК, после чего останется запрятать все «кусочки» в одну директорию, указать в программе путь к той папке, задать имя будущего «пирога» и место его сохранения, настроить наличие разделений (чёрточки или другие символы) и нажать кнопку Combine… для старта склеивания.

Ещё могу отметить программы File Joiner и WinMerge (тот же принцип), причём последняя позволяет не только склеить файлы, но и сравнить их содержимое.

Другие ОС

Как и обещал, коротко остановимся на слиянии текстовых файлов и в других операционных системах, например, для Mac OC мне известна программа DiffMerge, позволяющая также и сравнивать и объединять документы. А ещё в той же ОС несколько маленьких файлов превратить в один большой можно посредством использования утилиты textutil (запускается через терминал) и команды cat.

Объединить разрозненные txt файлы в один общий можно и в Linux. Происходит это примерно тем же образом, что и через командную строку в Windows. Только в Linux «исполнитель» команд зовётся «Терминал», а в него нужно вписать словосочетание cat имя1 имя2…имена всех имя выходного документа. Если адаптировать к нашему случаю, то получится примерно так cat 1.txt 2.txt itog.txt.

Заканчивая повествование, хочется сказать несколько ободряющих слов неопытным пользователям, которые решили самостоятельно разобраться в том, что такое «конкатенация». Дерзайте! Вы — молодцы! Таинственные и непонятные понятия только на первый взгляд выглядят страшно. В реальности они могут обозначать что-то совсем безобидное, например, конкатенация – это банальное объединение файлов. Писать скрипты и команды для cmd тоже не сложно, если знать основные принципы. А уж разобраться с любой программой можно за каких-то 5 или 10 минут. Главное – это ваше непоколебимое желание, тяга к новым знаниям и капля упрямства.

Повествование получилось довольно длинным, но надеюсь, полезным. До свидания.

Как написать »

спросил

Изменено
5 лет, 10 месяцев назад

Просмотрено
2к раз

Я пытаюсь создать и записать текстовый файл с помощью пакетного файла. Строка, которую я пытаюсь написать, приведена ниже, но у меня проблема с интерпретацией пакета. Я пытаюсь написать здесь файл, тогда как на самом деле это строка, которую я хочу написать внутри файла.

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

Строка:

echo while () >>test.txt

Итак, я хочу напечатать эти «<" и ">» внутри скобок, а также в текстовом файле и не хочу интерпретировать пакетный файл это как команда.

Вы, ребята, очень цените помощь!

Спасибо
Hijan

  • пакетный файл
  • текст
  • пакетная обработка 9 .


    Я рекомендую прочитать этот вопрос и этот вопрос , поскольку они посвящены одной и той же теме. Ниже приведен пример, взятый из моего вопроса, на который ответил Мофи.

    FOR Цикл, связанный с задержкой расширения

    Метапеременная цикла for %% n сильно отличается от других переменных. Метапеременная цикла FOR может меняться каждый раз, когда цикл выполняется.

     для %%G в ("|%%!<>()") сделать эхо %%~G>file.ext
     

    Это отобразит |%!M<() в file.ext , обратите внимание, что знак процента должен быть удвоен.

    0

    Зарегистрируйтесь или войдите в систему

    Зарегистрируйтесь с помощью Google

    Зарегистрироваться через Facebook

    Зарегистрируйтесь, используя адрес электронной почты и пароль

    Опубликовать как гость

    Электронная почта

    Требуется, но не отображается

    Опубликовать как гость

    Электронная почта

    Требуется, но не отображается

    Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

    Запись в файл в пакетном сценарии не работает

    спросил

    Изменено
    9 лет, 7 месяцев назад

    Просмотрено
    5к раз

    Я новичок в пакетном написании сценариев, работающем в среде Linux, и мне нужно написать пару простых сценариев здесь, на работе. Я работаю на заводе-изготовителе, и когда продукт проходит тест, он сохраняет тестовый сертификат в локальной сети. У нас есть десятки продуктов, но руководство хочет иметь возможность запускать скрипт, который в любой момент дня позволяет увидеть, сколько продуктов каждого из них было создано. Мой подход к этому заключается в том, чтобы перейти туда, где сохранены эти тестовые сертификаты, и посмотреть, какие из них были изменены сегодня.

    Следующий скрипт работает почти для всех продуктов, но по какой-то причине на двух из них он не записывает количество в указанный мной файл.

     @эхо выключено
    setlocal
    установить количество = 0
    cd /D T:/"Название продукта"/"Сертификаты испытаний"
    for /f %%i in ('forfiles -m *.txt -d 0 /c "cmd /c echo @FILE"') do @call set /a count+=1
    эхо %count%>J:\units_built\currently_built_productA.txt
    конечный локальный
     

    Я попытался выполнить команду записи, чтобы проверить, установлена ​​ли переменная count, и это так. Так почему-то запись не работает. Он создает пустой текстовый файл, хотя count является целым числом... У меня точно такой же код работает в различных других примерах, но по какой-то причине два не будут. Пожалуйста помоги! Спасибо

    • пакетный файл

    1

    Я предполагаю, что current_built_productA является динамическим значением. Ваш код не будет записываться в правильное место, если значение содержит пробелы. Например, echo Hello world>A B.txt запишет в файл с простым именем A . Решение заключается в заключении имени выходного файла в кавычки: echo Hello world>"A B.txt"

    Вы можете значительно упростить свой сценарий.

     @эхо выключено
    setlocal
    установить "продукт = SomeProduct"
    forfiles /p "T:\%product%\Test Certificates" /m *.txt -d 0|find /c """" >"J:\units_built\%someProduct%.txt"
     

    Вывод FORFILES передается команде FIND, которая подсчитывает количество строк, содержащих кавычки. Строка поиска должна быть заключена в кавычки, а литералы кавычек должны быть экранированы удвоением.

    Обратите внимание, что экранирование кавычек как "" является функцией команды НАЙТИ. Большинство пакетных команд экранируют кавычки, используя 9" .

    ОБНОВЛЕНИЕ

    Ответ Ваутера указывает на другую вероятную проблему с исходным кодом OP. Приведенный выше упрощенный код не будет страдать от этой проблемы.