Показать полную графическую версию : [решено] Передача строк из исполняемого файла в текстовый.
tr011_tmn
04-03-2009, 20:43
Добрый день, столкнулся с такой проблемой:
Есть:
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 и т.д.
Если я правильно понял, то попробуйте так:...
Echo KB925398-v2>test.txt
Echo WindowsMedia6-KB925398-v2-x86-%LANG%.exe -x:%TP% /Q /N /Z>>test.txt
Echo MOVE /Y WindowsMedia6-KB925398-v2-x86-%LANG%.exe %END%>>test.txt
...
tr011_tmn
04-03-2009, 21:07
gora, если я вас правильно понял, то: >test.txt , это указание CMD занести в test.txt указанную строку.
А существует ли возможность не всю строку а только выборочную информацию занести в test.txt. например KB925398-v2 без echo, или например сформировать файл с определенным содержимым.
пробовал через copy /a con, но в данном случае его вручную необходимо завершать комбинацией ctrl+Z, и смысл атоматизации теряется. Или все такие есть способ внести строку KB925398-v2 и тому подобные в текстовый файл?
если я вас правильно понял, то: >test.txt , это указание CMD занести в test.txt указанную строку. »
Команда Echo KB925398-v2>test.txt заносит в файл test.txt только то что стоит после самой команды и до символа > (подчеркнуто). Один символ > , записывая строку в файл, создает его, а два символа >> только дописывают строку в уже созданный файл. Сама команда Echo в файл не попадает.
tr011_tmn
04-03-2009, 21:28
gora, вот теперь мозайка начала складываться более или менее, простите за еще один глупый вопрос. Получается что :
Rem Начало файла >test.txt
Rem KB925398-v2 >>test.txt
Rem Конец файла >>test.txt
то на выходе я получу test.txt с содержимым:
Начало файла
KB925398-v2
Конец файла
то на выходе я получу test.txt с содержимым: »
Нет! Не Rem должно быть, а Echo.Echo Начало файла>test.txt
Echo KB925398-v2>>test.txt
Echo Конец файла>>test.txt
tr011_tmn
04-03-2009, 22:02
gora, теперь общий смысл понял, еще раз вам огромное спасибо
А как при этом оставить вывод в окне командной строки? Смотрел множество ресурсов - так и не разобрался. Получается, что echo выводит либо в файл, либо в окно. Как сделать "перенаправление", чтобы шло и туда и туда? Заранее спасибо.
А как при этом оставить вывод в окне командной строки? Смотрел множество ресурсов - так и не разобрался. Получается, что echo выводит либо в файл, либо в окно. Как сделать "перенаправление", чтобы шло и туда и туда? »
Писать две команды «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 (http://ru.wikipedia.org/wiki/Tee), например, из комплекта Native Win32 ports of some GNU utilities (http://unxutils.sourceforge.net/):
echo Hello World|tee.exe test.txt
Iska, спасибо. К сожалению, ничего из предложенного вами мне не подходит.
Мне нужен вывод команды, а не простой текст. В случае с повтором echo придётся повторять команду, эффект от LikeTee тот же (или всё-таки можно использовать? Тогда как делать call?), саму tee ставить не вариант (планируется использование скрипта не только на своей машине).
Много чего пробовал из следующего - вообще не работает.
Операторы перенаправления команд используются для изменения местоположений потоков ввода и вывода команд, заданных по умолчанию, на какие-либо другие. Местоположение потоков ввода и вывода называется дескриптор.
В следующей таблице описаны операторы перенаправления потоков ввода и вывода команд.
Оператор перенаправления
Описание
>
Записывает данные на выходе команды вместо командной строки в файл или на устройство, например, на принтер.
<
Читает поток входных данных команды из файла, а не с клавиатуры.
>>
Добавляет выходные данные команды в конец файла, не удаляя при этом существующей информации из файла.
>&
Считывает данные на выходе одного дескриптора как входные данные для другого дескриптора.
<&
Считывает входные данные одного дескриптора как выходные данные другого дескриптора.
|
Считывает выходные данные одной команды и записывает их на вход другой команды. Эта процедура известна под названием «канал».
По умолчанию, входные данные команды (дескриптор STDIN) отсылаются с клавиатуры интерпретатору команд Cmd.exe, далее Cmd.exe отправляет выходные данные команды (дескриптор STDOUT) в окно командной строки.
В следующей таблице представлены доступные дескрипторы.
дескриптор
Числовой эквивалент дескриптора
Описание
STDIN
0
Ввод с клавиатуры
STDOUT
1
Вывод в окно командной строки
STDERR
2
Ошибка вывода в окно командной строки
UNDEFINED
3-9
Эти дескрипторы определяются индивидуально для каждой прикладной программы.
Номера от 0 до 9 представляют первые 10 дескрипторов. Для запуска программы и перенаправления любого из 10 дескрипторов используется интерпретатор команд Cmd.exe. Для задания требуемого дескриптора перед оператором перенаправления введите его номер. Если дескриптор не определен, то по умолчанию оператором перенаправления ввода «<» будет ноль (0), а оператором перенаправления вывода «>» будет единица (1). После ввода оператора «<» или «>» необходимо указать, откуда читать и куда записывать данные. Можно задать имя файла или любой из существующих дескрипторов.
Для задания перенаправления в существующие дескрипторы используется амперсанд (&), затем номер требуемого дескриптора (например, &номер_дескриптора). Например, для перенаправления дескриптора 2 (STDERR) в дескриптор 1 (STDOUT) введите:
1<&2
Дублирование дескрипторов
Оператор перенаправления «&» дублирует выходные или входные данные с одного заданного дескриптора на другой заданный дескриптор. Например, для отправки выводных данных команды dir в файл File.txt и отправки ошибки вывода в файл File.txt введите:
dir>c:\file.txt 2>&1
При дублировании дескриптора происходит копирование всех его исходных характеристик. Например, если дескриптор доступен только для записи, то все его дубликаты будут доступны только для записи. Нельзя продублировать дескриптор с доступом только для чтения в дескриптор с доступом только для записи.
Перенаправление ввода команд (<)
Для перенаправления ввода команд с цифровой клавиатуры на файл или на устройство используйте оператор «<». Например, для ввода команды sort из файла List.txt введите:
sort<file.txt
Содержимое файла File.txt появится в командной строке в виде списка в алфавитном порядке.
Оператор «<» открывает заданное имя файла с доступом только для чтения. Поэтому с его помощью нельзя записывать в файл. Например, при запуске программы с оператором <&2 все попытки прочитать дескриптор 0 ни к чему не приведут, так как изначально он был открыт с доступом только для записи.
Примечание
* Дескриптор 0 задан по умолчанию для оператора перенаправления ввода «<».
Перенаправление вывода команд (>)
Выходные данные практически всех команд высвечиваются в окне командной строки. Даже команды, выводящие данные на диск или принтер, выдают сообщения и запросы в окне командной строки.
Для перенаправления вывода команд из окна командной строки в файл или на устройство применяется оператор «>». Этот оператор используется с большинством команд. Например, для перенаправления вывода команды dir в файл Dirlist.txt введите:
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 задан по умолчанию для оператора перенаправления вывода «>».
Использование оператора «<&» для перенаправления ввода и дублирования
Для использования оператора перенаправления ввода необходимо, чтобы задаваемый файл уже существовал. Если файл для ввода существует, то интерпретатор команд Cmd.exe открывает его с доступом только для чтения и его содержимое отправляет в команду так, как если бы это был ввод с цифровой клавиатуры. При задании дескриптора интерпретатор команд Cmd.exe дублирует его в дескриптор, существующий в системе.
Например, для считывания файла File.txt на вход в дескриптор 0 (STDIN) введите:
<file.txt
Для открытия файла File.txt, сортировки его содержимого и последующей отправки в окно командной строки (STDOUT) введите:
sort<file.txt
Для того чтобы найти файл File.txt и перенаправить дескриптор 1 (STDOUT) и дескриптор 2 (STDERR) в Search.txt введите:
findfile file.txt>search.txt 2<&1
Для дублирования определенного пользователем дескриптора 3 в качестве входной информации для дескриптора 0 (STDIN) введите:
<&3
Использование оператора «>&» для перенаправления ввода и дублирования
При перенаправлении вывода в файл и задании существующего имени файла интерпретатор команд Cmd.exe открывает файл с доступом только для записи и переписывает его содержимое. Если дескриптор задан, интерпретатор команд Cmd.exe дублирует файл в существующий дескриптор.
Для дублирования определенного пользователем дескриптора 3 в дескриптор 1 введите:
>&3
Для перенаправления всех выходных данных, включая выходные данные дескриптора 2 (STDERR), команды ipconfig в дескриптор 1 (STDOUT) и последующего перенаправления выходных данных в Output.log введите:
ipconfig.exe>>output.log 2>&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 с паузой после заполнения каждого экрана.
BumbleBee
13-07-2009, 19:36
Здравствуйте! Пытался перенаправить инфу из командной строки в текстовый файл и все бы хорошо, да только в текстовом файле ничего прочесть не могу - не понятные мне (да я думаю и другим тоже) символы или одним словом крякозябра какая-то. кодировка в командной стрке стандартная 866. Но если ее поменять на 1251, то в текстовом файле все читаемо, но не читаемо в самой командной строке. Вопрос у меня такой - а можно эти "полезные качества" как-нибудь объединить - чтобы и в командной строке читалось все и в текстовом файле тоже. Заранее большое вам человеческое спасибо!
Ну, смотря чем читать... :tongue:
Коммандная строка (она же "приглашение ДОС / DOS prompt") работает в ОЕМ-кодировке, в ней же хранятся и имена файлов на дисках, когда используется не-латиница, а народ привык к винде.
Вывод - при работе со скриптами пользоваться сторонними просмотрщиками (входят в состав почти любого "командЕра") или выбрать что-угодно по вкусу, такие программы обычно понимают множество кодировок, а иногда даже умеют определять текущую кодировку.
Если брать блокнот - то просто после открытия файла выбрать шрифт "Terminal" - он также в обязательном порядке имеет OEM-кодировку.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.