Спецсимволов полно. Текст более 200 строк. Содержимое файла openssl-1.0.0.cnf (программы OpenVPN)
Почему, что, его нельзя оформить процедурой и вставить перед выводимым текстом? »
Нельзя, так как используется этот код
. Там обязательное условие, что он должен быть в конце.
В принципе уже задачу решил, но не копируются пустые строки (в данном случае абсолютно не критично), но для красоты хотелось бы. Да и просто на будущее знать как можно реализовать подобную задачу.
Вот рабочий код. Реализовано через поиск начальной и конечной строки
. :Createopensslcnf :: Обязательно должно быть в начале батника или здесь @echo off, иначе некорректно экспортируется текст :: Допустимо в начале указать @echo on, а в этой части @echo off @echo off Set "FileIn=%~0" Set "Key1=# For use with easy-rsa version 2.0 and OpenSSL 1.0.0*" Set "Key2=init = 0" FOR /F "usebackq skip=2 tokens=1 delims=[]" %%i In (`Find /N /I "%Key1%" "%FileIn%"`) DO Set /A N=%%i-1 >"%KEY_CONFIG%" (FOR /F "usebackq delims=" %%i In (`More +%N% "%FileIn%"`) DO ( Echo %%i|Find /I /V "%Key2%"||(<nul Set /P Str=%%i&Exit /B 0) )) GoTo :EOF # For use with easy-rsa version 2.0 and OpenSSL 1.0.0* . . init = 0 :: ---------------------------------------- .
P. S.: это часть моего проекта по автоматизации работы с OpenVPN на Windows. Подобных решений нигде не встречал еще

Windows 10
, Windows 11
, Windows 7
, Windows 8
, Windows Server
, Windows Vista
, Windows XP
-
15.11.2016 -
81 653 -
12.11.2022 -
54

Командная строка – неизменный компонент любой операционной системы Windows, который берет свое происхождение прямиком от её предка – операционной системы MS-DOS. Данная программа имеет довольно широкие возможности, но сейчас мы поговорим о довольно примитивной вещи – сохранение (по факту – перенаправление) вывода командной строки в текстовый файл.
Почитать о том, как сделать тоже самое в Linux\BSD системах можно в этой статье
.
Использование перенаправления выполнения команд
В случае, если необходимо просто сохранить все, что вывела командная строка в текстовый файл, то нужно после введенной команды добавить символ “>”
, что приведет к созданию текстового файла и весь вывод командной строки отправится туда. Пример:
ping 8.8.8.8 > C:\Logs\ping.txt 
Обратите внимание, что командная строка при перенаправлении вывода может создать только текстовый файл, но не папку. Если вы введете несуществующий путь, то получите ошибку!
Как видно, командная строка не вывела никакого результата введенной команды на экран, но зато сохранила все в файл ping.txt. К сожалению, существуют ограничения перенаправления вывода, которые не позволяют одновременно отображать вывод и в окне командной строки, и сохранять их в текстовый файл. Однако, можно воспользоваться хитростью – сразу по завершению выполнения команды вывести содержимое текстового файла на экран с помощью команды type. Получится что-то следующее:
ping 8.8.8.8 > C:\Logs\ping.txt & type C:\Logs\ping.txt 
Если требуется файл не записывать (существующий текстовый файл будет перезаписан), а дописывать (существующий текстовый файл будет дополнен), нужно вместо одного символа “>” использовать два – “>>”
.
ping 8.8.8.8 >> C:\Logs\ping.txt echo Имя компьютера: %computername% > C:\Logs\ping.txt
echo Проверка пинга до google.ru >> C:\Logs\ping.txt
ping google.ru >> C:\Logs\ping.txt Содержимое получившегося текстового файла будет следующим:

Время чтение:
- Перемещать файлы.
- Переименовывать файлы.
- Выводить содержимое файлов в консоль.
- Записывать в файл (txt) результат выполнения команды.
Как всегда, все команды будут представлены Вашему вниманию в сопровождении коротких, но ясных описаниях, а так же будут прилагаться «Пошаговые» скриншоты.
Первым делом, я расскажу, как переместить файл из одной директории в другую.
Как переместить файл через консоль?
Для перемещения файлов используется команда под названием « MOVE
». Что бы переместить файл из корня диска «C:\ Move.txt» в папку, в моём случаи это «С:\Test_Move» пишем в консоль:

Результат выполнения команды. Файл « Move.txt
» был перемещён в папку « Test_Move
»
Если Вам нужно переместить все файлы с конкретным расширением, то в этом случаи стоит писать так:

Для примера я создал 3 файла «Move_1.txt, Move_2.txt и Move_3.txt» Как видно из скриншота выше, все три файла были перемещённых. В этом можно убедится не закрывая консоль.
Для проверки используем команду « DIR
»

С перемещением файлов на этом все. Но, если в каталоге куда нужно переместить файл уже есть такой? То пользователь получит сообщения, в котором его спросят подтвердить, перезаписать файл или нет.

Если ввести символ « Y
» то файл будет перезаписан. При этом содержимое уже имеющегося файла в каталоге «C:\Test_Move\» будут потеряны.
Если ввести символ « N
» файл не будет перемещён.
Если ввести « ALL
» то будут перемещены и перезаписаны все файлы с конкретным расширением. При этом, также, содержимое файлов в директории «C:\Test_Move\» будут потеряны.
Примечание: За место « ALL
» можно просто ввести букву « А
» результат будет додже.

Что бы отключить предупреждения используется ключик « /
Y
»

Теперь все файлы будет перемещены и перезаписаны без всяких предупреждений. Будьте внимательны, можно потерять важную информацию.
Как переименовать файл через cmd.exe?
Для того, чтобы переименовать существующий файл используется команда « RENAME
» Я создал файл с именем «test.txt» в корне диска «С:\» что бы его переименовать, скажем в «NEW_Name.txt» пишем в консоли.

Файл «test.txt» будет переименован.
Примечание: Команду « RENAME
» можно писать короче, просто « REN
» от этого результат не изменится.
Можно сменить расширения у всех файлов в каталоге, например с «txt» на «cmd». Для этого делаем так:

Теперь уже в знакомой нам папке «Test_Move» все 3(три) файла приобретут расширение «cmd» за место «txt»
Как вывести содержимое файла в консоль?
Если появилась необходимость просмотреть содержимое файла прямо в cmd. Для этого пользуемся командой « TYPE
» Я создал файл и написал в нём адрес своего блога. Теперь попробуем просмотреть данный файл из консоли, не запуская его обычном, привычным образом.

В общем все просто. Но как быть с файлами большего размера, где много информации? В этак случаи содержимое файла нужно выводить с паузой, чтобы просмотреть его полностью.
Для этого пишем так:

Для примера взял текст с первого попавшегося забугорного сайта.
Как записать в файл результат выполнения команды?
Для примера запишем в файл результат команды « DIR
» В консоль пишем:

Обратите внимание на символ « >
» он то и играет здесь главную роль. В итоге появится файл на диске «C:\» с именем «Save.txt» куда будет записан результат выполнения команды.
Если Вам понадобится записать результат команды «DIR» ещё раз, то файл «Save.txt» будет перезаписан и ранние содержимое файла будет удалено!
Что бы этого избежать и просто добавить новый результат не удаляя старый, стоит использовать символ « >
» два раза, то есть вот так:

Теперь файл не будет перезаписан, в него просто добавится новый результат в конец файла.
На этом я пожалуй закончу пост, и отправлюсь праздновать первый день рождения сына
, ему сегодня исполняется один годик!!!
Спасибо за внимание!
Перевод документации Microsoft TechNet, где описаны основные принципы работы с командной строкой.
Командная оболочка — это отдельный программный продукт, который обеспечивает прямую связь между пользователем и операционной системой. Текстовый пользовательский интерфейс командной строки предоставляет среду, в которой выполняются приложения и служебные программы с текстовым интерфейсом. В командной оболочке выполняются программы и результат выполнения отображается на экране в виде, сходном с интерпретатором Command.com MS-DOS. Командная оболочка операционной системы W2K использует для перевода введенной команды в формат, понятный системе, интерпретатор команд Cmd.exe, который загружает приложения и распределяет поток данных между приложениями.
Имеется возможность использовать командную оболочку для создания и редактирования пакетных файлов (также называемых сценариями, обычно пишутся на Basic, расширение файла vbs), что позволит автоматизировать выполнение обычных задач. Например, сценарии можно использовать для автоматизации управления учетными записями пользователей и ежедневной архивацией в нерабочие часы. Также можно использовать вариант сервера сценариев Windows, запускаемый из командной строки — CScript.exe (или GUI-версия wscript.exe), чтобы выполнить в командной оболочке более сложные сценарии.
Если запустить файл сценария (например, двойным щелчком или из командной строки), то по умолчанию используется wscript.exe (это поведение по умолчанию можно изменить, см. подсказку по команде CScript.exe, она выводится, если запустить CScript.exe без параметров).
Выполнение операций с помощью пакетных файлов является более эффективным, чем с помощью интерфейса пользователя. Пакетные файлы принимают все команды, доступные из командной строки.
Имеется возможность настроить окно командной строки для облегчения просмотра и для увеличения контроля за выполнением программ (системное меню консоли командной строки, Свойства).
Операторы перенаправления команд используются для изменения местоположений потоков ввода и вывода команд, заданных по умолчанию, на какие-либо другие. Местоположение потоков ввода и вывода называется дескриптором.
В следующей таблице представлены доступные дескрипторы.
Номера от 0 до 9 представляют первые 10 дескрипторов. Для запуска программы и перенаправления любого из 10 дескрипторов используется интерпретатор команд Cmd.exe. Для задания требуемого дескриптора перед оператором перенаправления введите его номер. Если дескриптор не определен, то по умолчанию оператором перенаправления ввода «<» будет ноль (0), а оператором перенаправления вывода «>» будет единица
. После ввода оператора «<» или «>» необходимо определить, откуда нужно читать или куда нужно записывать данные. Можно задать имя файла или любой из существующих дескрипторов.
Чтобы определить перенаправление для существующих дескрипторов, используйте знак амперсанд (&), за которым идет номер перенаправляемого дескриптора (то есть, &номер_дескриптора). Например, для перенаправления дескриптора 2 (STDERR) в дескриптор 1 (STDOUT) введите:
2>&1
В следующей таблице описаны операторы перенаправления потоков ввода и вывода.
По умолчанию входные данные команды (дескриптор STDIN) отсылаются с клавиатуры интерпретатору команд Cmd.exe, и Cmd.exe отправляет выходные данные команды (дескриптор STDOUT) в окно командной строки.
Перенаправление ввода (<)
. Чтобы перенаправить вход с клавиатуры в файл или на устройство, используйте оператор «<». Например, для ввода данных в команду sort из файла File.txt введите:
sort
Содержимое файла File.txt появится в командной строке в виде списка в алфавитном порядке.
Оператор «<» открывает файл с заданным именем только для чтения. Поэтому с его помощью нельзя записывать в файл. Например, при запуске программы с помощью перенаправления <&2 все попытки прочитать дескриптор 0 заканчиваются неудачей, так как дескриптор 2 первоначально открыт с доступом только для чтения.
Примечание: 0 это дескриптор по умолчанию для оператора перенаправления ввода <
Перенаправления вывода (>)
. Выходные данные практически всех команд высвечиваются в окне командной строки. Даже команды, выводящие данные на диск или принтер, выдают сообщения и запросы в окне командной строки. Чтобы перенаправить вывод из окна командной строки в файл или на устройство, используется оператор «>». Этот оператор используется с большинством команд. Например, для перенаправления вывода команды dir в файл dirlist.txt введите:
Если файл dirlist.txt не существует, интерпретатор команд Cmd.exe создаст его. Если файл существует, Cmd.exe заменит информацию в файле на данные, полученные от команды dir.
Для запуска команды netsh routing dump и отправки результатов ее работы в файл Route.cfg введите:
netsh routing dump>c:\route.cfg
Оператор > открывает указанный файл только для записи. Поэтому с помощью данного оператора файл прочитать нельзя. Например, при запуске программы с перенаправлением >&0 все попытки записать дескриптор 1 заканчиваются неудачей, так как дескриптор 0 первоначально открыт с доступом только для чтения.
Примечание: 1 является дескриптором по умолчанию для оператора перенаправления вывода >
Дублирование дескрипторов
. Оператор перенаправления & дублирует выходные или входные данные с одного заданного дескриптора на другой заданный дескриптор. Например, для отправки выводимых данных команды dir в файл File.txt и отправки ошибки вывода в файл File.txt введите:
При дублировании дескриптора происходит копирование всех его исходных характеристик. Например, если дескриптор доступен только для записи, то все его дубликаты будут доступны только для записи. Нельзя продублировать дескриптор с доступом только для чтения в дескриптор с доступом только для записи.
Использование оператора & для перенаправления ввода и дублирования
. Чтобы использовать оператор перенаправления ввода (<) с оператором дублирования (&), указанный файл должен существовать. Если входной файл существует, Cmd.exe открывает его только для чтения и отправляет его содержимое в файл, как если бы ввод выполнялся с клавиатуры. При задании дескриптора интерпретатор команд Cmd.exe дублирует его в дескриптор, существующий в системе.
Например, для считывания файла File.txt на вход в дескриптор 0 (STDIN) введите:
Для открытия файла File.txt, сортировки его содержимого и последующей отправки в окно командной строки (т. е. в поток STDOUT) введите:
Для того чтобы найти файл file.txt и перенаправить дескриптор 1 (STDOUT) и дескриптор 2 (STDERR) в search.txt введите:
findfile file.txt > search.txt 2 < &1
Для дублирования определенного пользователем дескриптора 3 в качестве входной информации для дескриптора 0 (STDIN) введите:
Использование оператора & для перенаправления вывода и дублирования
. При перенаправлении вывода в файл и задании существующего имени файла интерпретатор команд Cmd.exe открывает файл с доступом только для записи и переписывает его содержимое. Если дескриптор задан, интерпретатор команд Cmd.exe дублирует файл в существующий дескриптор. Для дублирования определенного пользователем дескриптора 3 в дескриптор 1 введите:
Для перенаправления всех выходных данных, включая выходные данные дескриптора 2 (поток STDERR), из команды ipconfig в дескриптор 1 (поток STDOUT) и последующего перенаправления выходных данных в файл Output.log, введите:
ipconfig.exe >> output.log 2 > &1
Использование оператора >> для добавления вывода
. Для добавления вывода в файл без потери содержащихся в нем данных используется двойной символ «больше» (то есть >>). Например, следующая команда добавляет список каталогов, созданный командой dir, в файл dirlist.txt:
Для добавления выходных данных команды netstat в конец файла tcpinfo.txt введите:
В данном примере обе команды запускаются одновременно, но команда sort приостанавливает работу до получения выходных данных команды dir. Команда sort использует выходные данные команды dir в качестве своих входных данных, а затем свои выходные данные отправляет в дескриптор 1 (STDOUT).
Комбинирование команд с операторами перенаправления
. Комбинируя команды-фильтры с другими командами и именами файлов, можно создавать команды на заказ. Например, для сохранения имен файлов, содержащих строку “log”, используется следующая команда:
dir /b | find "log" loglist.txt
Выход команды dir отсылается в команду-фильтр find. Имена файлов, содержащие строку «LOG», хранятся в файле loglist.txt в виде списка (например, NetshConfig.log, Logdat.svd и Mylog.bat).
dir c:\ /s /b | find "log" | more
5
. Для командной строки возможно использование фильтров, что позволяет управлять выводом информации. Всего есть 3 команды-фильтра:
More
Отображает содержимое файла или вывода команды в одном окне командной строки за раз.
Find
Поиск указанных символов в файлах и выходе команды.
Sort
Сортировка файлов и выхода команды по алфавиту.
6
. Использование нескольких команд и символов условной обработки.
Можно выполнять несколько команд из одной командной строки или сценария с помощью символов условной обработки. При использовании нескольких команд, содержащих символы условной обработки, выполнение команд, стоящих справа от символа условной обработки, будет проводиться в зависимости от результатов выполнения команды, стоящей слева от символа. Например, требуется, чтобы команда выполнялась, только если предыдущая команда не была выполнена успешно. Или требуется, чтобы команда выполнялась, только если предыдущая команда была выполнена успешно.
Для передачи нескольких команд можно использовать специальные символы, перечисленные в следующей таблице.
Наберите в командной строке:
cscript test.vbs //Nologo | cmd
После нажатия Enter запустится калькулятор.




