Windows вывести содержимое файла на экран

Вывести содержимое файла на экран CMD/BAT Решение и ответ на вопрос 174358

5 / 5 / 0

Регистрация: 09.10.2010

Сообщений: 49

1

Вывести содержимое файла на экран

09.10.2010, 22:21. Показов 43959. Ответов 6


Добрый вечер. Если есть возможность уделить мне время, то помогите, пожалуйста. Необходимо написать командный файл, который выдает на экран содержимое файла, имя которого задается как параметр при запуске командного файла. При этом анализируется — введен ли параметр. Если параметр не введен, то выдается сообщение и прекращается выполнение командного файла. Вместе с этим определяется — существует ли заданный файл.
Понимаю, делать для другого человека что-то не особо приятно, особенно если он не понимает и никогда этого не делал (это я о себе). Но может найдется, кто сможет объяснить. Если не написать готовый командный файл, то хотя бы направить в нужном направлении.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

09.10.2010, 22:21

Ответы с готовыми решениями:

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

Вот это только сделал: "Разработать командный файл, который бы…

Копировать содержимое одного указанного файла в другой указанный файл, дописывая, а не стирая его содержимое
Dragokas, Помогите пожалуйста с заданием!

Задание 3. Написать командный файл, копирующий…

Вывести в новый файл содержимое текстового файла, исключив из него строки, начинающиеся с символа «#»
Добрый день, уважаемые!
Помогите решить проблему: нужно получить содержимое файла, исключая…

Извлечь из файла только первую строку и вывести её на экран
есть текстовый файл, который содержит несколько строк. Нужно из него извлечь только первую строку и…

6

dn90

69 / 59 / 3

Регистрация: 07.09.2010

Сообщений: 87

11.10.2010, 12:11

2

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@echo off
chcp 1251
 
:txt
cls
echo Введите имя файла
set /p txt=
 
if not defined txt (
    cls
    echo Вы не ввели данные
    pause
    goto txt
)
 
if not exist "%txt%" (
    cls
    echo [%txt%] Такого файла нет
    pause
    set txt=
    goto txt
)
 
cls
echo Содержимое файла %txt%
echo.
type "%txt%"
echo.
pause > nul



1



5 / 5 / 0

Регистрация: 09.10.2010

Сообщений: 49

19.10.2010, 11:28

 [ТС]

3

не знаю, что сказать. огромное спасибо!!!! уже не надеялась, что кто-то ответит=)



0



osen’

5 / 5 / 0

Регистрация: 09.10.2010

Сообщений: 49

26.10.2010, 23:41

 [ТС]

4

а если расположение файла должно быть заранее задано? я предположила, что это будет выглядеть так, но похоже, я ошиблась…

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
chcp 437
D:
cd TEXT
cls
TYPE privet.txt
echo.
pause
 
if not defined privet.txt (
        cls
        echo Parmetr ne vveden
        pause
)
 
if not exist privet.txt (
        cls
        echo takogo faila net
        pause
)



0



illuminati

21 / 21 / 5

Регистрация: 14.06.2010

Сообщений: 108

27.10.2010, 02:48

5

osen’,

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
chcp 437
cd /D D:TEXT
cls
 
if not exist privet.txt (
cls
echo takogo faila net
goto EXIT
)
 
TYPE privet.txt
echo.
pause
 
:EXIT

может так ?



0



osen’

5 / 5 / 0

Регистрация: 09.10.2010

Сообщений: 49

27.10.2010, 13:47

 [ТС]

6

здесь проверяется условие, существует ли заданный файл, а в задании говорится, что нужно проверить, введен ли параметр
Но все равно, большое спасибо=)

Добавлено через 1 час 30 минут

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
chcp 437
privet.txt
 
if not defined %0 (
cls
echo parametr ne vveden
pause
)
D:
cd TEXT
cls
TYPE privet.txt
echo.
pause

Кажется, у меня получилось=)



0



utkabobr

0 / 0 / 0

Регистрация: 09.07.2015

Сообщений: 15

09.07.2015, 20:45

7

Цитата
Сообщение от osen’
Посмотреть сообщение

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
chcp 437
privet.txt
 
if not defined %0 (
cls
echo parametr ne vveden
pause
)
D:
cd TEXT
cls
TYPE privet.txt
echo.
pause

Кажется, у меня получилось=)

К сожалению, нет
надо:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
chcp 1251 >nul
set temp="Параметр не введён"
chcp 866 >nul
if "%1"=="" (
echo "%temp%"
)
cls
type "%1"
pause



0



I want to display the content of a text file in a CMD window. In addition, I want to see the new lines that added to file, like tail -f command in Unix.

Peter Mortensen's user avatar

asked Jun 20, 2013 at 15:16

Refael's user avatar

3

We can use the ‘type’ command to see file contents in cmd.

Example —

type abc.txt

More information can be found HERE.

Peter Mortensen's user avatar

answered Dec 25, 2015 at 1:22

Anmol Saraf's user avatar

Anmol SarafAnmol Saraf

14.6k10 gold badges50 silver badges60 bronze badges

1

I don’t think there is a built-in function for that

xxxx.txt > con

This opens the files in the default text editor in windows…

type xxxx.txt

This displays the file in the current window. Maybe this has params you can use…

There is a similar question here: CMD.EXE batch script to display last 10 lines from a txt file
So there is a «more» command to display a file from the given line, or you can use the GNU Utilities for Win32 what bryanph suggested in his link.

Community's user avatar

answered Jun 20, 2013 at 15:24

inf3rno's user avatar

inf3rnoinf3rno

24.4k11 gold badges113 silver badges194 bronze badges

0

To show content of a file:

type file.txt — cmd

cat file.txt — bash/powershell

answered Apr 20, 2021 at 2:28

LaurentBaj's user avatar

LaurentBajLaurentBaj

4415 silver badges10 bronze badges

You can use the ‘more’ command to see the content of the file:

more filename.txt

Peter Mortensen's user avatar

answered Jun 5, 2017 at 19:12

H.Marroquin's user avatar

1

Using a single PowerShell command to retrieve the file ending:

powershell -nologo "& "Get-Content -Wait c:logFile.log -Tail 10"

It applies to PowerShell 3.0 and newer.

Another option is to create a file called TAIL.CMD with this code:

powershell -nologo "& "Get-Content -Wait %1 -Tail %2"

Peter Mortensen's user avatar

answered Feb 17, 2016 at 12:59

Eyal's user avatar

EyalEyal

1611 silver badge9 bronze badges

1

To do this, you can use Microsoft’s more advanced command-line shell called «Windows PowerShell.» It should come standard on the latest versions of Windows, but you can download it from Microsoft if you don’t already have it installed.

To get the last five lines in the text file simply read the file using Get-Content, then have Select-Object pick out the last five items/lines for you:

Get-Content c:scriptstest.txt | Select-Object -last 5

Source: Using the Get-Content Cmdlet

answered May 18, 2016 at 18:50

Michael Yaeger's user avatar

1

You can do that in some methods:

One is the type command: type filename
Another is the more command: more filename
With more you can also do that: type filename | more

The last option is using a for
for /f "usebackq delims=" %%A in (filename) do (echo.%%A)
This will go for each line and display it’s content. This is an equivalent of the type command, but it’s another method of reading the content.

If you are asking what to use, use the more command as it will make a pause.

answered Jun 14, 2020 at 16:01

Anic17's user avatar

Anic17Anic17

6855 silver badges18 bronze badges

If you want it to display the content of the file live, and update when the file is altered, just use this script:

@echo off
:start
cls
type myfile.txt
goto start

That will repeat forever until you close the cmd window.

Peter Mortensen's user avatar

answered Mar 11, 2017 at 3:08

Johnny G Gaming's user avatar

1

There is no built in option available with Windows. To constantly monitor logs you can use this free application BareTailPro.

Peter Mortensen's user avatar

answered Jun 20, 2013 at 15:21

Sudheej's user avatar

SudheejSudheej

1,8136 gold badges28 silver badges55 bronze badges

If you want to display for example all .config (or .ini) file name and file content into one doc for user reference (and by this I mean user not knowing shell command i.e. 95% of them), you can try this :

FORFILES /M *myFile.ini /C "cmd /c echo File name : @file >> %temp%stdout.txt && type @path >> %temp%stdout.txt && echo. >> %temp%stdout.txt" | type %temp%stdout.txt

Explanation :

  • ForFiles : loop on a directory (and child, etc) each file meeting criteria
    • able to return the current file name being process (@file)
    • able to return the full path file being process (@path)
  • Type : Output the file content

Ps : The last pipe command is pointing the %temp% file and output the aggregate content. If you wish to copy/paste in some documentation, just open the stdout.txt file in textpad.

Anic17's user avatar

Anic17

6855 silver badges18 bronze badges

answered Nov 19, 2019 at 18:25

user11116047's user avatar

0

You can use either more filename.[extension] or type filename.[extension]

enter image description here

StupidWolf's user avatar

StupidWolf

43.7k17 gold badges37 silver badges68 bronze badges

answered Jun 4, 2021 at 6:12

Mohammed Siraj B's user avatar

2

tail -3 d:text_file.txt

tail -1 d:text_file.txt

I assume this was added to Windows cmd.exe at some point.

Ian's user avatar

Ian

29.8k19 gold badges69 silver badges105 bronze badges

answered Jan 29, 2016 at 14:14

noni's user avatar

2

Создание и чтение текстовых файлов в командной строкеЕсли вы оказались без доступа к чему-либо кроме командной строки или Windows PowerShell и по какой-то причине вам требуется возможность создания или чтения текстовых файлов, это вполне реализуемо, причем более чем одним методом.

В этой инструкции подробно о работе с текстовыми файлами в командной строки или PowerShell (разумеется, можно и в Терминале Windows) — создание и сохранение текстовых файлов, их вывод и чтение в консоли.

Создание текстовых файлов в командной строке

Возможность создания текстовых файлов доступна как в командной строке (cmd.exe), так и в PowerShell. Начнем с первого варианта.

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

Команда ECHO

Команда командной строки echo предназначена для вывода текстовых сообщений в окне консоли, например, при выполнении сценария в bat-файле, но может быть использована и для вывода текста в файл, благодаря возможности использования оператора «>» для перенаправления вывода из консоли в файл.

Пример команды:

echo Содержимое текстового файла > file.txt

В результате её выполнения в текущей рабочей папке командной строки будет создан файл с именем file.txt и содержимым «Содержимое текстового файла».

Создание текстового файла с помощью команды echo

COPY CON

Команда copy с параметром con позволяет скопировать содержимое консоли в файл. Использование возможности будет состоять из следующих шагов:

  1. Введите команду
    copy con имя_файла.txt

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

  2. Курсор переместится на строчку ниже, и вы сможете набирать текст так, как делаете это обычно, включая перенос строки. Создание текстового файла с помощью copy con
  3. Для завершения набора и сохранения текстового файла нажмите сочетание клавиш Ctrl+Z, а затем — Enter. Это добавит отметку конца файла и сохранит его в текущей папке с указанным на 1-м шаге именем. Сохранение текстового файла с помощью copy con

Создание текстового файла в PowerShell

PowerShell также имеет набор встроенных командлетов для сохранения текстовых данных в файл.

Out-File

Использование Out-File в PowerShell по своей функциональности сходно с оператором перенаправления вывода в командной строке. Вывод консоли перенаправляется в заданный файл.

Пример использования:

"Текстовая строка" | Out-File -FilePath .file.txt

В этом примере в текущей папке PowerShell будет создан файл с именем file.txt и содержимым «Текстовая строка».

New-Item

Создание нового текстового файла в PowerShell возможно с помощью командлета New-Item. Пример команды, в которой создается текстовый файл file.txt, содержащий «Текстовая строка» в текущем расположении:

New-Item -Path . -Name "file.txt" -ItemType "file" -Value "Текстовая строка"

Создание текстового файла с помощью New-Item в PowerShell

Set-Content и Add-Content

Ещё два командлета PowerShell для работы с текстовыми файлами:

  • Set-Content — перезаписывает содержимое файла
  • Add-Content — добавляет содержимое в конце выбранного файла

Их использование можно увидеть на примере следующей команды:

Add-Content -Path .file.txt -Value "Ещё одна текстовая строка"

Добавление текста к файлу в PowerShell

Вывод (чтение) текстового файла в командной строке и PowerShell

Теперь перейдем к способам просмотреть текстовые файлы в командной строке или PowerShell. Как и в предыдущем случае, учитывайте, что для файлов, содержащих кириллицу, возможны проблемы с отображением символов в правильной кодировке.

TYPE

Самый простой вариант — использование команды TYPE с указанием пути к файлу, который нужно отобразить в консоли, например:

type file.txt

Вывод текстового файла с помощью команды type

MORE

Если файл объемный и содержит большое количество строк, используйте команду more, например:

more file.txt

Выполнив команду, вы увидите часть содержимого текста, которая помещается в окне консоли, далее вы можете использовать следующие клавиши:

Вывод текстового файла с помощью команды more

  • Enter — для отображения следующей строки файла.
  • Пробел — для отображения следующих строк документа, которые поместятся в активное окно консоли.
  • P — Показать следующие N строк. После нажатия этой клавиши с последующим указанием количества строк, будет выведено соответствующее количество строк текстового документа.
  • S — пропустить следующие N строк, работает аналогично предыдущему варианту.
  • Клавиша «=» — для отображения текущего номера строки.
  • Q — для прекращения выполнения команды more.

Get-Content

Вывести содержимое текстового файла в PowerShell можно с помощью Get-Content с указанием пути к файлу, например:

Get-Content file.txt

Чтение текстового файла с помощью Get-Content в PowerShell

Также вы можете выводить определенные строки файла, с помощью команд вида (вывод первых или последних 10 строк соответственно):

Get-Content file.txt | Select-Object -First 10
Get-Content file.txt | Select-Object -Last 10

Или присвоить содержимое файла переменной и вывести конкретную строку:

$file_text = Get-Content file.txt
$file_text[2]

Текстовый редактор edit.com в Windows

Помимо использования ручного ввода команд, вы можете использовать консольные текстовые редакторы — сторонние в версиях для Windows, такие как Vim, Nano, Kinesics Text Editor или даже старый встроенный edit.com (может отсутствовать в вашей версии системы и требовать патча NTVDMx64).

Содержание

  1. Как отобразить содержимое текстового файла в CMD?
  2. Вывести содержимое файла на экран
  3. Как отобразить содержимое текстового файла в cmd?
  4. 11 ответов
  5. Файлы — cmd. Работа с файлами из консоли. Часть 2.
  6. Как переместить файл через консоль?
  7. Как переименовать файл через cmd.exe?
  8. Как вывести содержимое файла в консоль?
  9. Как записать в файл результат выполнения команды?
  10. Команды командной строки Windows CMD
  11. Запуск командной строки Windows.
  12. Команды командной строки.
  13. Операции с файлами и папками.
  14. Работа с дисками.
  15. Управление приложениями и процессами.
  16. Информация о системе.
  17. Просмотр и настройка сетевых параметров.
  18. Настройка и управление командной строкой.

Как отобразить содержимое текстового файла в CMD?

Вы можете использовать more команду. Например:

Мы можем использовать команду «type» для просмотра содержимого файла в cmd.

Я не думаю, что есть встроенная функция для этого

Здесь есть похожий вопрос: пакетный скрипт CMD.EXE для отображения последних 10 строк из текстового файла. Итак, есть команда «more» для отображения файла из данной строки, или вы можете использовать утилиты GNU для Win32, что предложил Брайанф в его ссылке.

Вы можете использовать команду «more» для просмотра содержимого файла:

Используя одну команду PowerShell для получения окончания файла:

Это относится к PowerShell 3.0 и новее.

Для этого вы можете использовать более продвинутую оболочку командной строки Microsoft под названием « Windows PowerShell ». Он должен быть стандартным на последних версиях Windows, но вы можете скачать его с Microsoft, если он еще не установлен.

Если вы хотите, чтобы он отображал содержимое файла в реальном времени и обновлялся при изменении файла, просто используйте этот скрипт:

Это будет повторяться до тех пор, пока вы не закроете окно cmd.

Вы можете сделать это несколькими способами:

Последний вариант использует. for for /f «usebackq delims=» %%A in (filename) do (echo.%%A) Это будет идти для каждой строки и отображать ее содержимое. Это эквивалент type команды, но это еще один метод чтения содержимого.

Если вы спрашиваете, что использовать, используйте more команду, поскольку она сделает паузу.

FORFILES / M * myFile.ini / C «cmd / c echo Имя файла: @file >>% temp% stdout.txt && type @path >>% temp% stdout.txt && echo. >>% temp% stdout.txt «| введите% temp% stdout.txt

Источник

Вывести содержимое файла на экран

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

tickВ интерактивном режиме дописывать в файл текст, удалять строки из файла и выводить на экран его содержимое
Второй день изучаю только. Вот это только сделал: «Разработать командный файл, который бы.

Вывести в новый файл содержимое текстового файла, исключив из него строки, начинающиеся с символа «#»
Добрый день, уважаемые! Помогите решить проблему: нужно получить содержимое файла, исключая.

tickИзвлечь из файла только первую строку и вывести её на экран
есть текстовый файл, который содержит несколько строк. Нужно из него извлечь только первую строку и.

здесь проверяется условие, существует ли заданный файл, а в задании говорится, что нужно проверить, введен ли параметр
Но все равно, большое спасибо=)

Добавлено через 1 час 30 минут

Вывести на экран содержимое файла
В чем моя ошибка, подскажите пожалуйста #include #include #include.

tickВывести содержимое файла на экран
Здравствуйте, подскажите как сделать правильно) Суть задачи такова, читаем из файла 512 байт.

tickВывести на экран содержимое *.cs файла
Всем привет. У меня есть cs файл с кодом и его нужно считать в моей новой программе, т.е. сделать.

Источник

Как отобразить содержимое текстового файла в cmd?

11 ответов

мы можем использовать команду «type», чтобы увидеть содержимое файла в cmd

больше информации можно найти здесь

Я не думаю, что для этого есть встроенная функция

это открывает файлы в текстовом редакторе по умолчанию в windows.

это отображает файл в текущем окне. Возможно, у этого есть парамы, которые вы можете использовать.

здесь есть аналогичный вопрос:CMD.EXE пакетный скрипт для отображения последних 10 строк из txt файла Таким образом, есть команда» больше » для отображения файла из данной строки, или вы можете использовать утилиты GNU для Что предложил брайанф в своей ссылке.

использование одной команды PowerShell для получения окончания файла:

применяется к powershell 3.0 и новее

другой вариант-создать файл с именем TAIL.CMD с этим кодом:

для этого вы можете использовать более продвинутую оболочку командной строки Microsoft под названием»Windows PowerShell.»Он должен быть стандартным для последних версий Windows, но вы можете загрузите его из Microsoft если вы еще не установили его.

вы можете использовать команду «больше», чтобы увидеть содержимое файла: more filename.txt

нет встроенной опции availble с windows. Для постоянного мониторинга журналов вы можете использовать это бесплатное приложение BareTailPro

вы можете получить утилиту хвоста из «Windows Server 2003 Resource Kit Tools» найденный здесь—https://www.microsoft.com/en-us/download/confirmation.aspx?id=17657

Если вы хотите, чтобы он отображал содержимое файла в реальном времени и обновлялся при изменении файла, просто используйте этот скрипт:

что будет повторяться вечно, пока вы не закроете окно cmd

Я предполагаю, что это было добавлено в Windows cmd.ехе в какой-то момент.

использование типа команды Read File в Windows

Источник

Файлы — cmd. Работа с файлами из консоли. Часть 2.

rating onrating onrating onrating off rating off

Вторая часть поста, в котором будут рассмотрены основные команды для работы с файлами. В первой части было рассказано про то, как удалить файл и каталог используя cmd.exe, если Вы не читали, то советую прочитать. В этом посте будут рассмотрены команды, которые позволят пользователю…

Как всегда, все команды будут представлены Вашему вниманию в сопровождении коротких, но ясных описаниях, а так же будут прилагаться «Пошаговые» скриншоты.

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

Как переместить файл через консоль?

Для перемещения файлов используется команда под названием «MOVE». Что бы переместить файл из корня диска «C: Move.txt» в папку, в моём случаи это «С:Test_Move» пишем в консоль:

Move 1

Результат выполнения команды. Файл «Move.txt» был перемещён в папку «Test_Move»

Если Вам нужно переместить все файлы с конкретным расширением, то в этом случаи стоит писать так:

Move 2

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

Для проверки используем команду «DIR»

Move DIR 3

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

Move 4

Если ввести символ «Y» то файл будет перезаписан. При этом содержимое уже имеющегося файла в каталоге «C:Test_Move» будут потеряны.

Если ввести символ «N» файл не будет перемещён.

Если ввести «ALL» то будут перемещены и перезаписаны все файлы с конкретным расширением. При этом, также, содержимое файлов в директории «C:Test_Move» будут потеряны.

Примечание: За место «ALL» можно просто ввести букву «А» результат будет додже.

Move 5

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

Move 6

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

Как переименовать файл через cmd.exe?

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

RENAME 1

Файл «test.txt» будет переименован.

Примечание: Команду «RENAME» можно писать короче, просто «REN» от этого результат не изменится.

Можно сменить расширения у всех файлов в каталоге, например с «txt» на «cmd». Для этого делаем так:

RENAME 2

Теперь уже в знакомой нам папке «Test_Move» все 3(три) файла приобретут расширение «cmd» за место «txt»

Как вывести содержимое файла в консоль?

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

TYPE 1

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

Для этого пишем так:

TYPE 2
Для примера взял текст с первого попавшегося забугорного сайта.

В конце добавляем «| more» таким образом содержимое файла будет выводится не полностью а отрывками, чтобы просмотреть следующею часть файла жмём «Enter»

Как записать в файл результат выполнения команды?

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

SAVE 11

Обратите внимание на символ «>» он то и играет здесь главную роль. В итоге появится файл на диске «C:» с именем «Save.txt» куда будет записан результат выполнения команды.

Если Вам понадобится записать результат команды «DIR» ещё раз, то файл «Save.txt» будет перезаписан и ранние содержимое файла будет удалено!

Что бы этого избежать и просто добавить новый результат не удаляя старый, стоит использовать символ «>» два раза, то есть вот так:

SAVE 2

Теперь файл не будет перезаписан, в него просто добавится новый результат в конец файла.

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

Источник

Команды командной строки Windows CMD

У тех кто не работал с командной строкой в первую очередь возникает вопрос: Как открыть командную строку Windows?

Запуск командной строки Windows.

Программа консоли Windows, как и многие другие системные программы, находится в директории c:Windowssystem32 и называется cmd.exe. Так как консоль Windows является системной программой, то открыть командную строку в любой версии Windows, включая Windows10, можно через инструмент «Выполнить», введя название программы cmd.

image 14

В результате поиска будет предложено несколько действий, одно из которых позволяет запустить Командную строку Windows 10 от имени администратора

image 15

В открывшейся консоли CMD мы увидим стандартное приветствие командной строки Windows. Текущей директорией является папка пользователя. Если консоль открыта от имени Администратора, то текущей директорией будет c:windowssystem32.

image 13

Команды командной строки.

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

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

Посмотреть справку по использованию команды можно используя следующий синтаксис.

Например справка по команде COPY будет выглядеть так.

image 16

Список всех доступных команд можно посмотреть используя команду HELP.

image 6

Для быстроты использования, команды создававлись в виде аббревиатуры или сокращения слов. Чтобы хорошо запоминать такие команды нужно понимать что означает ее сокращенная запись. В скобках приведены пояснения сокращений.

Операции с файлами и папками.

Работа с дисками.

Управление приложениями и процессами.

Информация о системе.

Просмотр и настройка сетевых параметров.

Настройка и управление командной строкой.

Источник

Материалы по курсу «Основы программирования»

Работа в текстовой оболочке операционной системы (ОС)

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

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

Текстовые оболочки допускают как интерактивный режим — пользователь вводит
команды и наблюдает их результат, так и «пакетный» (batch) — пользователь
может создать файл со списком команд, которые будут выполняться автоматически.
Кроме того, в текстовых оболочках присутствуют средства, позволяющие
комбинировать работу нескольких программ — вывод одной программы связывать
со входом другой.

На сегодняшней лекции мы будем рассматривать основные команды и принципы
работы в оболочках cmd.exe на Windows и Bash на Linux и macOS.

Для запуска оболочки cmd.exe на Windows нужно найти пункт меню «Командная
строка» в группе «Служебные — Windows» в меню «Пуск»:

  • «Пуск» → «Служебные — Windows» → «Командная строка» (Windows 10)
  • «Пуск» → «Программы» → «Служебные» → «Командная строка (Windows 7)

Для запуска оболочки на Linux и macOS нужно найти приложение «Терминал» или
«Консоль» (в разных дистрибутивах Линукса оно может называться по-разному)

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

win-console.png

Командная строка Linux или macOS (выглядит примерно так):

posix-console.png

У оболочки есть так называемое приглашение — место на экране для ввода
команды. В командной строке Windows приглашение выглядит так:

В нём отображается путь к текущей папке (у оболочки, как и у любой другой
программы, есть текущая папка) и знак >. Пользователь вводит команды после
знака >.

В оболочке Bash (используемой по умолчанию на Linux и macOS), приглашение
выглядит так:

mazdaywik@Mazdaywik-NB10:~$

В нём отображается имя текущего пользователя, имя компьютера, знак :,
путь к текущей папке (знаком ~ отображается домашняя папка) и знак $,
после которого пользователь вводит команды.

Команды оболочки позволяют перемещаться по папкам, манипулировать файлами
(копировать, переименовывать, перемещать, удалять) и запускать другие
программы. Команды в Командной строке Windows и Bash различаются.

Общий синтаксис команды:

‹команда› ‹параметр1› ‹параметр2›…

Здесь ‹команда› — это имя команды, параметры — указание режимов работы
команды и имён файлов, которыми команда манипулирует. Бывают команды, которые
вообще не принимают параметры.

Имя команды отделяется от параметров пробелом, сами параметры тоже разделяются
пробелами. Если имя команды или параметр сам должен содержать пробелы, то он
заключается в кавычки: "двойные" (работают и на Windows, и на Linux/macOS)
или 'одинарные' (работают только на Linux/macOS).

Команды бывают встроенные — обрабатываются самой оболочкой, либо являются
именами программ.

Основные команды оболочки

Смена текущей папки, cd

cd ‹имя папки›, работает и на Windows, и на Linux, и на macOS.

C:UsersMazdaywik>cd Desktop

C:UsersMazdaywikDesktop>
mazdaywik@Mazdaywik-NB10:~$ cd example
mazdaywik@Mazdaywik-NB10:~/example$

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

Создание папки, mkdir

Для того, чтобы создать новую пустую папку, используется команда mkdir:

На Windows вместо mkdir можно использовать более короткий синоним md,
на Linux и macOS — только mkdir.

mazdaywik@Mazdaywik-NB10:~$ mkdir "New folder"
mazdaywik@Mazdaywik-NB10:~$ cd "New folder"
mazdaywik@Mazdaywik-NB10:~/New folder$
C:UsersMazdaywik>mkdir "New folder"

C:UsersMazdaywik>cd "New folder"

C:UsersMazdaywikNew folder>

Создание текстового файла

На Windows для создания текстового файла используется команда вида

после чего с клавиатуры нужно ввести содержимое файла. Ввод завершается
нажатием клавиш Ctrl-Z и Enter.

На Linux и macOS нужно ввести команду

ввести содержимое файла и нажать комбинацию клавиш Ctrl-D.

C:UsersMazdaywikNew folder>copy con "new file.txt"
first line
second line
third line
^Z
Скопировано файлов:         1.

C:UsersMazdaywikNew folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ cat > "new file.txt"
first line
second line
third line
mazdaywik@Mazdaywik-NB10:~/New folder$

Просмотр содержимого папки

На Windows используется команда dir, которая распечатывает содержимое
папки, выводя сведения о каждом файле. Если команду вызвать с параметром /b,
будут выведены только имена файлов. В папке New folder на данный момент
всего один файл:

C:UsersMazdaywikNew folder>dir
 Том в устройстве C имеет метку System
 Серийный номер тома: 0052-DDD1

 Содержимое папки C:UsersMazdaywikNew folder

09.04.2022  14:33    <DIR>          .
09.04.2022  14:33    <DIR>          ..
09.04.2022  14:33                37 new file.txt
               1 файлов             37 байт
               2 папок  43 388 399 616 байт свободно

C:UsersMazdaywikNew folder>dir /b
new file.txt

C:UsersMazdaywikNew folder>

На Linux и macOS используется команда ls, которая распечатывает имена
файлов в папке. Если указать параметр -l, то будут распечатаны подробные
сведения:

mazdaywik@Mazdaywik-NB10:~/New folder$ ls
'new file.txt'
mazdaywik@Mazdaywik-NB10:~/New folder$ ls -l
total 4
-rw-r--r-- 1 mazdaywik mazdaywik 34 Apr  9 14:34 'new file.txt'
mazdaywik@Mazdaywik-NB10:~/New folder$

Копирование файлов

На Windows используется команда

copy ‹исходный файл› ‹имя копии›
copy ‹исходный файл› ‹целевая папка›

На Linux и macOS:

cp ‹исходный файл› ‹имя копии›
cp ‹исходный файл› ‹целевая папка›

Для примера скопируем файл new file.txt в copy.txt:

C:UsersMazdaywikNew folder>copy "new file.txt" copy.txt
Скопировано файлов:         1.

C:UsersMazdaywikNew folder>dir
 Том в устройстве C имеет метку System
 Серийный номер тома: 0052-DDD1

 Содержимое папки C:UsersMazdaywikNew folder

09.04.2022  14:41    <DIR>          .
09.04.2022  14:41    <DIR>          ..
09.04.2022  14:33                37 copy.txt
09.04.2022  14:33                37 new file.txt
               2 файлов             74 байт
               2 папок  43 390 611 456 байт свободно

Команда dir нам показала, что в папке теперь находятся два файла.
Имя файла new file.txt нужно было заключать в кавычки, т.к. оно содержит
пробел. Имя целевого файла copy.txt пробелов не содержит, поэтому кавычки
не нужны.

На Linux:

mazdaywik@Mazdaywik-NB10:~/New folder$ cp "new file.txt" copy.txt
mazdaywik@Mazdaywik-NB10:~/New folder$ ls -l
total 8
-rw-r--r-- 1 mazdaywik mazdaywik 34 Apr  9 14:43  copy.txt
-rw-r--r-- 1 mazdaywik mazdaywik 34 Apr  9 14:34 'new file.txt'
mazdaywik@Mazdaywik-NB10:~/New folder$

Переименование файлов

На Windows используется команда

ren ‹исходное имя› ‹новое имя›

На Linux и macOS:

mv ‹исходное имя› ‹новое имя›

Переименуем файл copy.txt в backup.txt:

C:UsersMazdaywikNew folder>ren copy.txt backup.txt

C:UsersMazdaywikNew folder>dir /b
backup.txt
new file.txt

C:UsersMazdaywikNew folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ mv copy.txt backup.txt
mazdaywik@Mazdaywik-NB10:~/New folder$ ls
 backup.txt  'new file.txt'
mazdaywik@Mazdaywik-NB10:~/New folder$

Перемещение файлов

На Windows используется команда move:

move ‹исходный файл› ‹целевой файл›
move ‹исходный файл› ‹целевая папка›

на Linux и macOS — mv:

mv ‹исходный файл› ‹целевой файл›
mv ‹исходный файл› ‹целевая папка›

Таким образом, на Linux и macOS используется одна и та же команда и для
переименования, и для перемещения файлов.

Создадим папку nested в текущей папке и переместим в неё файл backup.txt:

C:UsersMazdaywikNew folder>mkdir nested

C:UsersMazdaywikNew folder>move backup.txt nested
Перемещено файлов:         1.

C:UsersMazdaywikNew folder>dir /b
nested
new file.txt

C:UsersMazdaywikNew folder>dir /b nested
backup.txt

C:UsersMazdaywikNew folder>

Мы создали папку nested, переместили в неё файл backup.txt, посмотрели
содержимое текущей папки и содержимое папки nested. Как видим, команда
dir может принимать имя папки, содержимое которой нужно распечатать. Если
имя не указано, то распечатывается содержимое текущей папки.

mazdaywik@Mazdaywik-NB10:~/New folder$ mkdir nested
mazdaywik@Mazdaywik-NB10:~/New folder$ mv backup.txt nested
mazdaywik@Mazdaywik-NB10:~/New folder$ ls
 nested  'new file.txt'
mazdaywik@Mazdaywik-NB10:~/New folder$ ls nested
backup.txt
mazdaywik@Mazdaywik-NB10:~/New folder$

На Linux и macOS команда ls также поддерживает указание имени папки,
которую нужно распечатать.

Удаление файлов

На Windows используется команда del или erase (это два синонима), которая
принимает имя удаляемого файла:

del ‹имя файла›
erase ‹имя файла›

На Linux и macOS такая команда называется rm:

Удалим файл backup.txt в папке nested:

C:UsersMazdaywikNew folder>del nestedbackup.txt

C:UsersMazdaywikNew folder>dir /b nested

C:UsersMazdaywikNew folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ rm nested/backup.txt
mazdaywik@Mazdaywik-NB10:~/New folder$ ls nested
mazdaywik@Mazdaywik-NB10:~/New folder$

Команды dir /b и ls ничего не вывели, т.к. папки пустые.

Удаление папок

Для удаления папки используется команда rmdir на всех трёх рассматриваемых
операционных системах. На Windows можно использовать более короткий синоним
rd. Команда rmdir (rd) может удалить только пустой каталог, в противном
случае выдаст ошибку.

Удалим папку nested:

C:UsersMazdaywikNew folder>rmdir nested

C:UsersMazdaywikNew folder>dir /b
new file.txt

C:UsersMazdaywikNew folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ rmdir nested
mazdaywik@Mazdaywik-NB10:~/New folder$ ls
'new file.txt'
mazdaywik@Mazdaywik-NB10:~/New folder$

Просмотр содержимого файла

Для того, чтобы вывести на экран содержимое файла, на Windows используется
команда type:

На Linux и macOS — cat:

Посмотрим содержимое файла new file.txt:

C:UsersMazdaywikNew folder>type "new file.txt"
first line
second line
third line

C:UsersMazdaywikNew folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ cat "new file.txt"
first line
second line
third line
mazdaywik@Mazdaywik-NB10:~/New folder$

Очистка экрана

Чтобы стереть содержимое окна консоли, нужно выполнить команду cls
на Windows или clear на Linux/macOS.

Запуск консоли Python в консоли оболочки

На Windows, если Python установлен правильно, нужно ввести команду python,
на Linux и macOS — python3 (т.к. команда python без цифры на конце
может запустить Python 2.7 на некоторых дистрибутивах Linux или версиях macOS).

C:UsersMazdaywikNew folder>python
Python 3.9.5 (tags/v3.9.5:0a7dcbd, May  3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+2
3
>>> exit
Use exit() or Ctrl-Z plus Return to exit
>>> exit()

C:UsersMazdaywikNew folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ python3
Python 3.8.10 (default, Mar 15 2022, 12:22:08)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+2
3
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
mazdaywik@Mazdaywik-NB10:~/New folder$

Завершение работы в оболочке

Команда exit (работает везде) закрывает окно оболочки.

Запуск программ на Python в оболочке

Для запуска программы на Python’е нужно выполнить в оболочке команду

python ‹имя исходного файла›
python3 ‹имя исходного файла›

в зависимости от операционной системы.

Напишем программу, которая распечатывает фразу Hello, World! и запустим её.

C:UsersMazdaywikNew folder>copy con hello.py
print('Hello, World!')
^Z
Скопировано файлов:         1.

C:UsersMazdaywikNew folder>python hello.py
Hello, World!

C:UsersMazdaywikNew folder>
mazdaywik@Mazdaywik-NB10:~/New folder$ cat > hello.py
print('Hello, World!')
mazdaywik@Mazdaywik-NB10:~/New folder$ python3 hello.py
Hello, World!
mazdaywik@Mazdaywik-NB10:~/New folder$

На Windows программы на Python можно запускать, просто указывая имя исходного
файла — интерпретатор Python будет вызываться автоматически:

C:UsersMazdaywikNew folder>hello.py
Hello, World!

C:UsersMazdaywikNew folder>

На Linux и macOS, чтобы так сделать, нужно выполнить дополнительные действия:
добавить в начало файла специальный комментарий

и пометить файл как исполнимый командной chmod +x.

mazdaywik@Mazdaywik-NB10:~/New folder$ cat > hello.py
#!/usr/bin/env python3

print('Hello, World!')
mazdaywik@Mazdaywik-NB10:~/New folder$ chmod +x hello.py
mazdaywik@Mazdaywik-NB10:~/New folder$ ./hello.py
Hello, World!
mazdaywik@Mazdaywik-NB10:~/New folder$

Одна из особенностей оболочек Linux и macOS — для запуска программ из текущей
папки нужно явно добавлять в начало ./, к этому надо привыкнуть.

Стандартные потоки ввода-вывода

В операционных системах (и в Windows, и в unix-подобных системах macOS и Linux)
для программ, запускаемых в консоли, доступны три стандартных потока
ввода-вывода — три псевдофайла, посредством которых программы могут
взаимодействовать с пользователем и друг с другом.

  • Стандартный ввод (условно называемый stdin) — по умолчанию связан с вводом
    с клавиатуры.
  • Стандартный вывод (stdout) — по умолчанию связан с выводом текста на экран,
    предназначен для вывода полезных данных программы.
  • Стандартный вывод ошибок (stderr) — тоже по умолчанию связан с экраном,
    предназначен для вывода сообщений об ошибках.

Если программа запрашивает пользовательский ввод, то, как правило, она читает
его из (псевдо)файла stdin, если печатает на экран — по умолчанию выводит
в (псевдо)файл stdout.

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

Для того, чтобы ввести конец файла в операционной системе Windows, нужно
нажать комбинацию клавиш Ctrl-Z (на экране высветится ^Z) и после этого
Enter. Для того, чтобы ввести конец файла в unix-подобных ОС, нужно нажать
Ctrl-D.

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

Пусть есть некоторая команда program, которая принимает некоторые аргументы,
кроме того, в процессе работы запрашивает пользовательский ввод с клавиатуры
и выводит что-то на экран.

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

program arg1 arg2... < input.txt

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

Рассмотрим следующую программу greeting.py:

name = input("Введите ваше имя:")
sirname = input("Введите вашу фамилию:")

print("Привет,", name, sirname)

(встроенная функция input() запрашивает ввод с клавиатуры)

Рассмотрим запуск программы обычным образом и с использованием
перенаправления ввода:

Z:>python greeting.py
Введите ваше имя:Александр
Введите вашу фамилию:Коновалов
Привет, Александр Коновалов

Z:>type input.txt
Alexander
Konovalov
Z:>python greeting.py < input.txt
Введите ваше имя:Введите вашу фамилию:Привет, Alexander Konovalov

Z:>

Первый запуск демонстрирует ввод данных с клавиатуры (stdin связан
с клавиатурой): я вводил свои имя и фамилию (завершая ввод каждой строки
нажатием на клавишу Enter, которая вводила и перевод строки тоже), набираемый
мною текст отображался на экране и считывался из stdin встроенной функцией
input().

Далее, при помощи команды type я показал, что в данной папке есть текстовый
файл input.txt с двумя строчками, в которых написаны, соответственно,
имя и фамилия (из-за особенностей Windows, кириллица может считываться неверно).

В третьей команде я связал стандартный ввод stdin с файлом input.txt,
в результате чего программа считывала данные не с клавиатурного ввода,
а из текстового файла — на экране видно только то, что она выводит,
но не считывает.

Можно считать, что при перенаправлении ввода стандартный ввод неявно считается
файлом, открытым в режиме r (для чтения).

Стандартный вывод можно перенаправить двумя способами: для перезаписи и для
дозаписи (сравни с режимами w и a функции open() в Python). Для того,
чтобы стандартный вывод перенаправить в файл в режиме перезаписи (если файла
не было, он будет создан, если файл был, его старое содержимое сотрётся),
нужно к команде запуска добавить > «имя-файла.txt», в режиме дозаписи (если
файл был, то новые данные будут добавляться в конец) — >> «имя-файла.txt»:

program arg1 arg2... > output.txt
program arg1 arg2... >> output.txt

Рассмотрим тот же пример:

Z:>python greeting.py
Введите ваше имя:Alexander
Введите вашу фамилию:Konovalov
Привет, Alexander Konovalov

Z:>python greeting.py > output.txt
Alexander
Konovalov

Z:>

В текущей папке появится файл output.txt со следующим содержимым:

Введите ваше имя:Введите вашу фамилию:Привет, Alexander Konovalov

Когда мы перенаправили вывод в файл output.txt, то, что программа до этого
выводила на экран (строчку Введите ваше имя: и т.д.), она стала выводить
в файл — свои имя и фамилию я писал практически наугад, не видя, что программа
меня спрашивает.

Дело в том, что в обоих случаях программа пишет в поток стандартного вывода
stdout, который, однако, в первом случае был связан с экраном, и мы видели,
что программа пишет, а во втором случае — с файлом, и на экран в результате
ничего не выводится (зато весь вывод попадает в файл).

Стандартный поток ошибок перенаправляют редко, для перенаправления используются
похожие команды, но перед знаками > и >> нужно указать цифру 2:

program arg1 arg2... 2>errors.txt
program arg1 arg2... 2>>errors.txt

Описанный выше синтаксис связывания связывания стандартных потоков с файлами
одинаково работает и в Windows, и в unix-подобных системах (macOS и Linux).

Связывать стандартные потоки можно не только с файлами, но и между собой.
Если у нас есть две программы, одна из которых (назовём её prog1) пишет
данные на stdout, а вторая (назовём её prog2) читает данные со стандартного
ввода (stdin), то их можно связать в конвейер:

Стандартный вывод stdout программы prog1 будет связан со стандартным
вводом stdin программы prog2, то, всё, что будет выводить первая программа,
будет считывать вторая программа.

В конвейере может быть сколько угодно команд:

prog1 | prog2 | prog3 | prog4

Здесь у команд prog2 и prog3 связаны и стандартные вводы, и стандартные
выводы.

В командной строке unix-подобных операционных систем имеется довольно много
встроенных команд, предназначенных для обработки текстовых данных (выбор
подстрок, сортировка строчек и т.д.), эти программы удобно комбинировать
при помощи конвейеров. Командная строка Windows гораздо беднее на эти
возможности.

Возьмём текстовый файл следующего содержимого:

jack.txt

«`
This is the house that Jack built.
This is the malt
That lay in the house that Jack built.
This is the rat, that ate the malt
That lay in the house that Jack built.
This is the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the cow with the crumpled horn,
That tossed the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the man all tattered and torn,
That kissed the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the priest all shaven and shorn,
That married the man all tattered and torn,
That kissed the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the cock that crowed in the morn,
That waked the priest all shaven and shorn,
That married the man all tattered and torn,
That kissed the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
This is the farmer sowing his corn,
That kept the cock that crowed in the morn,
That waked the priest all shaven and shorn,
That married the man all tattered and torn,
That kissed the maiden all forlorn,
That milked the cow with the crumpled horn,
That tossed the dog, that worried the cat,
That chased the rat, that ate the malt
That lay in the house that Jack built.
«`

Для того, чтобы найти в нём все строки, в которых упоминается некоторая
строчка, на Windows нужно использовать команду find "искомая строка"
(кавычки обязательны), в unix-подобных системах — grep "искомая строка"
(кавычки нужны, если в искомой строке есть пробелы).

Для примера, найдём в файле слово dog:

Z:>find "dog" < jack.txt
This is the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,

Z:>

Программа find считывает строчки со стандартного ввода и выводит их
на стандартный вывод. Аналогично работает и grep:

mazdaywik@Mazdaywik-NB10:~/modules$ grep dog < jack.txt
This is the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
That tossed the dog, that worried the cat,
mazdaywik@Mazdaywik-NB10:~/modules$

Команда sort (есть и там, и там) сортирует строки, считанные из stdin,
и выводит их в алфавитном порядке на stdout (часть вывода опущена):

Z:>sort < jack.txt
That chased the rat, that ate the malt
...
This is the cat,
This is the cock that crowed in the morn,
This is the cow with the crumpled horn,
This is the dog, that worried the cat,
This is the farmer sowing his corn,
This is the house that Jack built.
This is the maiden all forlorn,
This is the malt
This is the man all tattered and torn,
This is the priest all shaven and shorn,
This is the rat, that ate the malt

Z:>
mazdaywik@Mazdaywik-NB10:~/modules$ sort < jack.txt
That chased the rat, that ate the malt
...
This is the cat,
This is the cock that crowed in the morn,
This is the cow with the crumpled horn,
This is the dog, that worried the cat,
This is the farmer sowing his corn,
This is the house that Jack built.
This is the maiden all forlorn,
This is the malt
This is the man all tattered and torn,
This is the priest all shaven and shorn,
This is the rat, that ate the malt
mazdaywik@Mazdaywik-NB10:~/modules$

Найдём все строчки, содержащие слово This, отсортирует их по алфавиту
и результат сложим в файл с именем this.txt:

Z:>find "This" < jack.txt | sort > this.txt
mazdaywik@Mazdaywik-NB10:~/modules$ grep This < jack.txt | sort > this.txt

В обоих случаях получим файл this.txt со следующим содержимым:

This is the cat,
This is the cock that crowed in the morn,
This is the cow with the crumpled horn,
This is the dog, that worried the cat,
This is the farmer sowing his corn,
This is the house that Jack built.
This is the maiden all forlorn,
This is the malt
This is the man all tattered and torn,
This is the priest all shaven and shorn,
This is the rat, that ate the malt

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

В обоих случаях у программы поиска подстроки (find или grep) стандартный
ввод связывался с исходным файлом, стандартный вывод — со следующей программой
в конвейере — командой сортировки sort. Её стандартный вывод перенаправлялся
в целевой файл.

Для программ, работающих в командной строке, принято соглашение:

  • Если среди аргументов командной строки имена файлов не указаны, то чтение
    осуществляется со стандартного ввода.
  • Если имена файлов указаны, что обрабатываются все перечисленные файлы.
  • Результат работы программы выводится на стандартный вывод.

Таким образом, командам grep, find, sort и другим встроенным командам
можно в командной строке указывать и имена файлов:

grep 'какая-то строчка' one.txt two.txt three.txt
find "какая-то строчка" one.txt two.txt three.txt

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

На Windows наиболее употребительными являются файлы с именами nul и con.
Чтение из файла nul сразу же приводит к обнаружению конца файла (т.е.
этот файл воспринимается как пустой), запись в него игнорируется. Чтение
из файла con соответствует чтению с клавиатуры (даже если стандартный ввод
перенаправлен), запись в него соответствует записи на экран (даже если
перенаправлен станадартный вывод). Файлы nul и con неявно присутствуют
в каждой папке.

На unix-подобных системах чаще всего используется файл /dev/null, аналогичный
файлу nul на Windows: при чтении он воспринимается как пустой (сразу же
встречаем конец файла), при записи записываемые данные игнорируются.

Файлы nul и /dev/null используются в командной строке для того, чтобы
подавить вывод на экран:

C:…>program args... > nul
user@comp:~/...$ program args... > /dev/null

С псевдофайлом con мы работали, когда создавали текстовый файл из командной
строки на Windows:

C:UsersMazdaywikNew folder>copy con "new file.txt"
first line
second line
third line
^Z
Скопировано файлов:         1.

C:UsersMazdaywikNew folder>

Команда cat в unix-системах читает указанные в командной строке файлы
и выводит их содержимое на стандартный вывод. Если файлы не указаны, то она
выводит на стандартный вывод содержимое стандартного ввода. Когда мы создавали
файл в командной строке Linux, мы просто перенаправляли стандартный вывод:

mazdaywik@Mazdaywik-NB10:~/New folder$ cat > "new file.txt"
first line
second line
third line
mazdaywik@Mazdaywik-NB10:~/New folder$

Взаимодействие программ на Python с операционной системой

Для взаимодействия с операционной системой используется модуль os,
подключаемый командной

Чтобы посмотреть перечень всех доступных средств, нужно в среде IDLE
ввести следующую команду:

>>> import sys
>>> help(sys)

Нам все эти средства не нужны, кроме двух основных:

  • доступ к стандартным потокам ввода-вывода,
  • доступ к аргументам командной строки.

Стандартные потоки ввода-вывода доступны как переменные

  • sys.stdin
  • sys.stdout
  • sys.stderr

В этих переменных находятся объекты файлов, связанные со стандартными потоками.
Их можно использовать в файловых операциях точно также, как и объекты файлов,
полученные из функции open().

При запуске программ в среде IDLE конец файла для sys.stdin вводится как
Ctrl-D в новой строчке независимо от операционной системы, вывод на sys.stdout
отображается синим цветом, на sys.stderr — красным цветом.

Пример: используем .readlines() для sys.stdin.

>>> sys.stdin.readlines()
one
two
three
>>> ['onen', 'twon', 'threen']

Пример: выводим на sys.stderr:

>>> print("Напечатается синим")
Напечатается синим
>>> print("Напечатается красным", file=sys.stderr)
Напечатается красным
>>>

Мы говорили о том, что функция print() по умолчанию пишет на экран, чтобы
перенаправить вывод в файл, мы использовали параметр file=. Если быть точным,
функция print() всегда пишет в файл, по умолчанию file=sys.stdout.

Для доступа к аргументам командной строки используется переменная sys.argv,
в которой находится список аргументов. Этот список всегда непустой, т.к.
значением нулевого элемента списка sys.argv[0] является имя самой запущенной
программы. Для примера создадим файл test-argv.py со следующим содержимым:

import sys

for i, arg in enumerate(sys.argv):
    print(i, arg)

Запустим его:

Z:>python test-argv.py one two three
0 test-argv.py
1 one
2 two
3 three

Z:>
mazdaywik@Mazdaywik-NB10:~/modules$ python3 test-argv.py one two three
0 test-argv.py
1 one
2 two
3 three

Действительно, нулевой аргумент — имя запущенной программы, остальные —
параметры, указанные после имени. Если параметр содержит пробелы, его нужно
заключить в кавычки:

Z:>python test-argv.py "with space" without space
0 test-argv.py
1 with space
2 without
3 space

Пробел между словами with space стал частью параметра, т.к. внутри кавычек,
пробел между словами without и space стал разделителем параметров.

Пример. Напишем программу cat.py, имитирующую работу программы cat
в unix-системах. Программа cat читает файлы, перечисленные в командной
строке, каждый из них открывает и выводит его содержимое на стандартный
вывод. Если имена файлов отсутствуют, то читается стандартный ввод.

import sys


def main():
    if len(sys.argv) == 1:
        process_stream(sys.stdin)
    else:
        for name in sys.argv[1:]:
            with open(name) as stream:
                process_stream(stream)


def process_stream(stream):
    sys.stdout.write(stream.read())


if __name__ == "__main__":
    main()

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

В программе объявлены две функции main() и process_stream(), в самом конце
вызывается функция main(). Условие __name__ == "__main__" выполняется
всегда при обычном запуске программы.

За счёт того, что основной код программы сосредоточен в функции main(),
а не «размазан» по всему исходнику, понимание программы упрощается, кроме того,
в основном коде мы можем вызывать функции до их объявления.

Функция main() описывает обычную логику для консольных программ: обрабатывать
либо файлы (если указаны явно), или стандартный ввод. Поскольку обработка и того,
и другого выполняется одинаково, эта логика вынесена во вспомогательную функцию
process_stream().

Убедимся, что функция работает, как мы ожидаем:

mazdaywik@Mazdaywik-NB10:~/modules$ python3 cat.py test-argv.py this.txt
import sys

for i, arg in enumerate(sys.argv):
    print(i, arg)
This is the cat,
This is the cock that crowed in the morn,
This is the cow with the crumpled horn,
This is the dog, that worried the cat,
This is the farmer sowing his corn,
This is the house that Jack built.
This is the maiden all forlorn,
This is the malt
This is the man all tattered and torn,
This is the priest all shaven and shorn,
This is the rat, that ate the malt
mazdaywik@Mazdaywik-NB10:~/modules$ cat
hello!
hello!
mazdaywik@Mazdaywik-NB10:~/modules$ python3 cat.py
hello!
hello!
mazdaywik@Mazdaywik-NB10:~/modules$

Мы видим, что поведение встроенной программы cat и написанной нами cat.py
идентично на Linux. Кроме того, программа cat.py будет работать и на Windows:

Z:>python cat.py test-argv.py this.txt
import sys

for i, arg in enumerate(sys.argv):
    print(i, arg)
This is the cat,
This is the cock that crowed in the morn,
This is the cow with the crumpled horn,
This is the dog, that worried the cat,
This is the farmer sowing his corn,
This is the house that Jack built.
This is the maiden all forlorn,
This is the malt
This is the man all tattered and torn,
This is the priest all shaven and shorn,
This is the rat, that ate the malt

Z:>

Пример. Напишем программу grep.py, имитирующую работу встроенной программы
grep unix-подобных систем. Программа принимает в качестве первого параметра
искомую подстроку, после которой может следовать несколько имён файлов. Программа
выводит все строки указанных файлов, содержащие данную подстроку. Если указано
два и более файлов, то в начало выводимой строки добавляется имя сканируемого
файла. Если файлы не указаны, читается стандартный ввод. Программа может
принимать ключ -v, говорящий о том, что вывод нужно инвертировать, т.е.
выводить строки, не содержащие указанной подстроки.

(На самом деле, сходство будет неточное, т.к. программа grep принимает
шаблон, а наша программа — подстроку. Кроме того, ключей у команды grep
на самом деле очень много, а у нас будет только один -v.)

Для простоты будем считать, что ключ -v указывается перед искомой подстрокой.

import sys


def main():
    v = False
    argv = sys.argv[1:]
    if len(argv) > 0 and argv[0] == '-v':
        v = True
        argv = argv[1:]

    if len(argv) == 0:
        print(sys.argv[0]
              + ': Не указана строка поиска',
              file=sys.stderr)
        return

    search_string = argv[0]
    files = argv[1:]

    if len(files) == 0:
        process(search_string, sys.stdin, None, v)
    elif len(files) == 1:
        with open(files[0]) as stream:
            process(search_string, stream, None, v)
    else:
        for name in files:
            with open(name) as stream:
                process(search_string, stream, name, v)


def process(search_string, stream, name, v):
    if name != None:
        prefix = name + ':'
    else:
        prefix = ''

    for line in stream:
        found = (search_string in line)
        if not v:
            if found:
                print(prefix + line, end='')
        else: # -v указан
            if not found:
                print(prefix + line, end='')


if __name__ == "__main__":
    main()

Функция process принимает, помимо потока, который нужно просканировать,
искомую строку, имя файла и факт наличия параметра -v. Переменная prefix
содержит строку, добавляемую в начало вывода каждой строки: она пустая,
если имя файла печатать не надо (сканируется стандартный ввод или файл один),
в ней имя файла и двоеточие в остальных случаях.

Код функции process можно несколько сократить:

def process(search_string, stream, name, v):
    if name != None:
        prefix = name + ':'
    else:
        prefix = ''

    for line in stream:
        found = (search_string in line)
        if found != v:
            print(prefix + line, end='')

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

mazdaywik@Mazdaywik-NB10:~/modules$ grep if cat.py grep.py
cat.py:    if len(sys.argv) == 1:
cat.py:if __name__ == "__main__":
grep.py:    if len(argv) > 0 and argv[0] == '-v':
grep.py:    if len(argv) == 0:
grep.py:    if len(files) == 0:
grep.py:    elif len(files) == 1:
grep.py:    if name != None:
grep.py:        if found != v:
grep.py:if __name__ == "__main__":
mazdaywik@Mazdaywik-NB10:~/modules$ python3 grep.py if cat.py grep.py
cat.py:    if len(sys.argv) == 1:
cat.py:if __name__ == "__main__":
grep.py:    if len(argv) > 0 and argv[0] == '-v':
grep.py:    if len(argv) == 0:
grep.py:    if len(files) == 0:
grep.py:    elif len(files) == 1:
grep.py:    if name != None:
grep.py:        if found != v:
grep.py:if __name__ == "__main__":
mazdaywik@Mazdaywik-NB10:~/modules$ grep for test-argv.py
for i, arg in enumerate(sys.argv):
mazdaywik@Mazdaywik-NB10:~/modules$ grep -v for test-argv.py
import sys

    print(i, arg)
mazdaywik@Mazdaywik-NB10:~/modules$ python3 grep.py for test-argv.py
for i, arg in enumerate(sys.argv):
mazdaywik@Mazdaywik-NB10:~/modules$ python3 grep.py -v for test-argv.py
import sys

    print(i, arg)
mazdaywik@Mazdaywik-NB10:~/modules$

Понравилась статья? Поделить с друзьями:
  • Windows вход в качестве пакетного задания windows 2008
  • Windows встроенная программа просмотра изображений windows
  • Windows все время загружается в безопасном режиме
  • Windows все версии на одной флешке
  • Windows все версии в одном месте