CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.

Аватара пользователя
tr011_tmn

CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.

Сообщение tr011_tmn »

Добрый день, столкнулся с такой проблемой:

Есть:


командный файл такого содержания:






echo off

cls

set t=%time% & echo Время начала

echo %t%

...

лирика с заданием переменных

...

Echo KB925398-v2

WindowsMedia6-KB925398-v2-x86-%LANG%.exe -x:%TP% /Q /N /Z

MOVE /Y WindowsMedia6-KB925398-v2-x86-%LANG%.exe %END%

...

echo работа закончена

:exit

set t1=%time%

echo %t1%

pause






Хотелось бы понять как передать из CMD в текстовый файл (желательно с его созданием из CMD) строки или строк:

KB925398-v2 и т.д.
Аватара пользователя
BumbleBee

Re: CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.

Сообщение BumbleBee »

Здравствуйте! Пытался перенаправить инфу из командной строки в текстовый файл и все бы хорошо, да только в текстовом файле ничего прочесть не могу - не понятные мне (да я думаю и другим тоже) символы или одним словом крякозябра какая-то. кодировка в командной стрке стандартная 866. Но если ее поменять на 1251, то в текстовом файле все читаемо, но не читаемо в самой командной строке. Вопрос у меня такой - а можно эти "полезные качества" как-нибудь объединить - чтобы и в командной строке читалось все и в текстовом файле тоже. Заранее большое вам человеческое спасибо!
Аватара пользователя
tr011_tmn

Re: CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.

Сообщение tr011_tmn »

gora, если я вас правильно понял, то: >test.txt , это указание CMD занести в test.txt указанную строку.

А существует ли возможность не всю строку а только выборочную информацию занести в test.txt. например KB925398-v2 без echo, или например сформировать файл с определенным содержимым.

пробовал через copy /a con, но в данном случае его вручную необходимо завершать комбинацией ctrl+Z, и смысл атоматизации теряется. Или все такие есть способ внести строку KB925398-v2 и тому подобные в текстовый файл?
Аватара пользователя
gora

Re: CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.

Сообщение gora »

Цитата tr011_tmn:



если я вас правильно понял, то: >test.txt , это указание CMD занести в test.txt указанную строку.
CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.




Команда Echo KB925398-v2>test.txt заносит в файл test.txt только то что стоит после самой команды и до символа > (подчеркнуто). Один символ > , записывая строку в файл, создает его, а два символа >> только дописывают строку в уже созданный файл. Сама команда Echo в файл не попадает.
Аватара пользователя
gora

Re: CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.

Сообщение gora »

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





Код:

Код: Выделить всё

Rem Начало файла >test.txt
Rem KB925398-v2 >>test.txt
Rem Конец файла >>test.txt

то на выходе я получу test.txt с содержимым:





Код:

Код: Выделить всё

Начало файла
KB925398-v2 
Конец файла
Аватара пользователя
tr011_tmn

Re: CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.

Сообщение tr011_tmn »

Цитата tr011_tmn:



то на выходе я получу test.txt с содержимым:
CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.




Нет! Не Rem должно быть, а Echo.

Код:

Код: Выделить всё

Echo Начало файла>test.txt
Echo KB925398-v2>>test.txt
Echo Конец файла>>test.txt
Аватара пользователя
gora

Re: CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.

Сообщение gora »

gora, теперь общий смысл понял, еще раз вам огромное спасибо
Аватара пользователя
tr011_tmn

Re: CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.

Сообщение tr011_tmn »

gora, теперь общий смысл понял, еще раз вам огромное спасибо
Аватара пользователя
LuSP

Re: CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.

Сообщение LuSP »

Цитата LuSP:



А как при этом оставить вывод в окне командной строки? Смотрел множество ресурсов - так и не разобрался. Получается, что echo выводит либо в файл, либо в окно. Как сделать "перенаправление", чтобы шло и туда и туда?
CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.




Писать две команды «echo», одну на вывод на консоль, другую — в файл.

Либо оформить подобный вывод в виде простой процедуры:
читать дальше »




Код:

Код: Выделить всё

@echo off
setlocal enableextensions enabledelayedexpansion
set strFileName=Test.txt
call :LikeTee "Hello World" "%strFileName%"
call :LikeTee "Привет мир" "%strFileName%"
call :LikeTee "Hello World2"
call :LikeTee
endlocal
exit /b 0
rem ==========================================================================
rem ==========================================================================
:LikeTee
    setlocal enableextensions enabledelayedexpansion
    if "%~1"=="" (
        goto :eof
    ) else (
        echo %~1
        if "%~2"=="" (
            goto :eof
        ) else (
            echo %~1>>"%~2"
        )
    )
    endlocal
    exit /b 0
rem ==========================================================================





Либо использовать для этих целей утилиту
tee
, например, из комплекта
Native Win32 ports of some GNU utilities
:



Код:

Код: Выделить всё

echo Hello World|tee.exe test.txt
Аватара пользователя
LuSP

Re: CMD/BAT - [решено] Передача строк из исполняемого файла в текстовый.

Сообщение LuSP »

Iska, спасибо. К сожалению, ничего из предложенного вами мне не подходит.

Мне нужен вывод команды, а не простой текст. В случае с повтором echo придётся повторять команду, эффект от LikeTee тот же (или всё-таки можно использовать? Тогда как делать call?), саму tee ставить не вариант (планируется использование скрипта не только на своей машине).

Много чего пробовал из следующего - вообще не работает.


читать дальше »


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



В следующей таблице описаны операторы перенаправления потоков ввода и вывода команд.



Оператор перенаправления





Описание



>





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



<





Читает поток входных данных команды из файла, а не с клавиатуры.



>>





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



>&





Считывает данные на выходе одного дескриптора как входные данные для другого дескриптора.



&1



При дублировании дескриптора происходит копирование всех его исходных характеристик. Например, если дескриптор доступен только для записи, то все его дубликаты будут доступны только для записи. Нельзя продублировать дескриптор с доступом только для чтения в дескриптор с доступом только для записи.

Перенаправление ввода команд (&1

Использование оператора «>>» для добавления вывода



Для добавления выходных данных команды в конец файла без потери хранящейся в нем информации используется двойной символ «больше» (>>). Например, следующая команда добавляет список каталогов, созданный командой dir, в файл Dirlist.txt:



dir>>dirlist.txt



Для добавления выходных данных команды netstat в конец файла Tcpinfo.txt введите:



netstat>>tcpinfo.txt

Использование оператора канала (|)



Оператор канала «вертикальная линия» (|) забирает выходные данные одной команды (по умолчанию STDOUT) и направляет их на вход другой команды (по умолчанию STDIN). Например, следующая команда сортирует каталог:



dir | sort



В данном примере обе команды запускаются одновременно, но команда sort приостанавливает работу до получения выходных данных команды dir. Команда sort использует выходные данные команды dir в качестве своих входных данных, а затем свои выходные данные отправляет в дескриптор 1 (STDOUT).

Комбинирование команд с операторами перенаправления



Комбинируя команды-фильтры с другими командами и именами файлов, можно создавать команды на заказ. Например, для сохранения имен файлов, содержащих строку «LOG», используется следующая команда:



dir /b | find "LOG" > loglist.txt



Выход команды dir отсылается в команду-фильтр find. Имена файлов, содержащие строку «LOG», хранятся в файле Loglist.txt в виде списка (например, NetshConfig.log, Logdat.svd и Mylog.bat).



При использовании более одного фильтра в одной команде их необходимо отделять с помощью канала (|). Например, следующая команда ищет в каждом каталоге диска C файлы, в названии которых присутствует строка «Log», и выводит их постранично на экран:



dir c:\ /s /b | find "LOG" | more



Наличие канала (|) указывает Cmd.exe, что выход команды dir нужно отправить команде-фильтру find. Команда find выбирает только те имена файлов, в которых содержится строка «LOG». Команда more выводит на экран имена файлов, полученные командой find с паузой после заполнения каждого экрана.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»