0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 7
1

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

01.02.2017, 15:27. Показов 5252. Ответов 14
Метки нет (Все метки)

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

Добавлено через 2 часа 59 минут
Пытаюсь сделать через команду FINDSTR, а именно FINDSTR /N /B "[A-Z]" result.doc
Те команды, у которых описание больше чем на 1 строчку пропускает
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2017, 15:27
Ответы с готовыми решениями:

В текстовый файл не записывается результат выполнения команды
При запуске приложения через консоль все работает c:\iperf_client\iperf.exe -c...

Запись выполнения команды в текстовый файл
Как записать все что выводит команда в бат файле в текстовый файл

Как записать результат выполнения команды telnet в файл?
Добрый день, подскажите как записать результат команды telnet <имя удаленного сервера> <порт> в...

Запись результата выполнения команды IPCONFIG в текстовый файл
я создаю батник так ipconfig/all> 1.txt Вопрос в следующем как задать кодировку что бы...

14
5539 / 1682 / 291
Регистрация: 10.12.2013
Сообщений: 5,933
01.02.2017, 16:50 2
Windows Batch file
1
powershell -exec bypass -c "help.exe| %{[regex]::Replace($_, '(^[A-Z]{2,})', ('{0}. {1}' -f $i++, '$1'))}"
0
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 7
02.02.2017, 14:28  [ТС] 3
Да, это оно, а можно сделать так, чтобы он не пропускал порядковые номера? Т.е. тут он выводит:
86. SHIFT <текст>
<текст>
88. SHUTDOWN <текст>

Вот чтобы он шел 86, а потом 87, можно так сделать?
0
Эксперт Python
5403 / 3827 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
02.02.2017, 17:10 4
Цитата Сообщение от DaveyJones3 Посмотреть сообщение
можно сделать так, чтобы он не пропускал порядковые номера?
Не однострочник, но нумерует правильно:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<# :
  @echo off
    pushd "%~dp0"
        powershell -nop -exec Bypass -command ^
            "&{[ScriptBlock]::Create((cat "%~f0") -join [Char]10).Invoke(@(&{$args}%*))}"
    pause
  exit /b
#>
 
$text="";help.exe|%{$text+=$_ +"`r`n"}
$m=([regex]"(?sm)(^[A-Z]+.+?)(?=`r`n[A-Z]+)").Matches($text)
0..($m.count-1)|%{
    ("[" +($_+1)+"]" + $m[$_].Groups[1].value)|out-file help.txt -enc default -append
}
Результат:
Код
[1]ASSOC          Вывод либо изменение сопоставлений по расширениям имен файлов.
[2]ATTRIB         Отображение и изменение атрибутов файлов.
[3]BREAK        Включение и выключение режима обработки комбинации клавиш CTRL+C.
[4]BCDEDIT        Задает свойства в базе данных загрузки для управления начальной
               загрузкой.
[5]CACLS          Отображение и редактирование списков управления доступом (ACL)
               к файлам.
[6]CALL           Вызов одного пакетного файла из другого.
[7]CD             Вывод имени либо смена текущей папки.
[8]CHCP           Вывод либо установка активной кодовой страницы.
[9]CHDIR          Вывод имени либо смена текущей папки.
[10]CHKDSK         Проверка диска и вывод статистики.
[11]CHKNTFS        Отображение или изменение выполнения проверки диска во время 
               загрузки.
[12]CLS            Очистка экрана.
...
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
02.02.2017, 17:19 5
Зачем вы PS сюда пихаете.Делайте все с помощью команд смд.Представте ,что у вас задача есть,а PS нету.Не упрощайте себе жизнь
0
Эксперт Python
5403 / 3827 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
02.02.2017, 17:50 6
Цитата Сообщение от ZoOoO Посмотреть сообщение
Зачем вы PS сюда пихаете.
Хотим и пихаем. Кому нужно непременно на batch - обречен на боль и тоску.
Цитата Сообщение от ZoOoO Посмотреть сообщение
Делайте все с помощью команд смд
Делай. Лично тебе никто не запрещает.
Цитата Сообщение от ZoOoO Посмотреть сообщение
Не упрощайте себе жизнь
Одно из главных качеств программиста (если ты до сих пор не знал) - лень. @Ларри Уолл.
PS:Делай выводы.
0
5539 / 1682 / 291
Регистрация: 10.12.2013
Сообщений: 5,933
02.02.2017, 17:57 7
Цитата Сообщение от ZoOoO Посмотреть сообщение
Зачем вы PS сюда пихаете
пихаем для получения удовольствия.
а для батхерта существует cmd и поддерживающая его группа убеждённых мазохистов.
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
02.02.2017, 18:22 8
Все с вами понятно.
А я вот страдаю.Разбил строку на две строки(Одна с названием команды,а другая с описаниями,без команд).Теперь все это надо как то соединить

Windows Batch file
1
2
3
@echo off
for /f "usebackq skip=1 tokens=2*" %%c in (`help`) do echo %%c %%d
pause
Windows Batch file
1
2
3
4
5
6
7
@echo off
Setlocal EnableDelayedExpansion
for /f "usebackq tokens=1*" %%a in (`help^|findstr /b [A-Z]`) do (
set /a b+=1
echo !b!.%%a
)
pause
0
5539 / 1682 / 291
Регистрация: 10.12.2013
Сообщений: 5,933
02.02.2017, 18:22 9
Garry Galler,
неужто покороче нельзя?
свой вариант я, каюсь, и не проверил как следует,
мне и в голову не пришло( да и ни в какое другое место), что инкремент счётчика в такой конструкции будет всегда, вне зависимости от совпадения рег.выр.
0
Эксперт Python
5403 / 3827 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
02.02.2017, 19:17 10
volodin661,
Я пробовал делать инкрементацию через action в replace:
Код
help.exe| %{[regex]::Replace($_, '(^[A-Z]{2,})', {$i++;'{0}. {1}' -f $i,$args[0].value})}
но тогда она вообще только один раз увеличивает счетчик. Поэтому пошел другим путем. Но, наверно, сделать как-то по другому можно.
0
5539 / 1682 / 291
Регистрация: 10.12.2013
Сообщений: 5,933
02.02.2017, 20:23 11
Традиционное решение через Vim/ком.строка

nhelp.bat:
Windows Batch file
1
2
3
4
vim  ^
     +"read !help" ^
     +"let c=1 | g/\v^[A-Z]{2,}/exec 'norm! I' . printf('%%02d. ', c) | let c=c+1" ^
     +"wq! nhelp.txt"
0
Любознательный
3151 / 858 / 230
Регистрация: 10.03.2016
Сообщений: 2,030
02.02.2017, 22:18 12
Цитата Сообщение от Garry Galler Посмотреть сообщение
сделать как-то по другому можно.
Цитата Сообщение от volodin661 Посмотреть сообщение
Традиционное решение через Vim/ком.строка
Начали за здравие, а закончилось всё Vim-ом
А почему бы не сделать так, раз уж powershell задействовали:
Windows Batch file
1
2
3
4
5
6
7
@echo off
echo Выполняем...
echo.
powershell -nologo "&{$i=0;$a=help.exe;$OFS='#';$b=([string]$a -creplace '#\s*([a-zа-яё])',' $1' -replace '#\s*#','#').split('#');$b|%%{[regex]::Replace($_, '(^[A-Z]{2,})', ('{0}. {1}' -f $i++, '$1'))}}"
echo.
echo Готово.
pause
?
0
69 / 59 / 18
Регистрация: 23.01.2017
Сообщений: 170
03.02.2017, 00:13 13
Вот решение на batch языке:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
setlocal enabledelayedexpansion
 
set num=1
 
for /f "tokens=* delims=. eol=" %%a in ('help') do (
    for /f "tokens=1" %%b in ("%%a") do (
        set string=%%a
        for /f %%c in ('echo:%%b^|findstr /r /x "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*"') do (
            set string=^(!num!^)!string!
            set /a num+=1
        )
        echo !string!
    )
)
0
3455 / 1993 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
03.02.2017, 06:52 14
Короче:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
@echo off
>nul chcp 1251
setlocal enabledelayedexpansion
 
>"result.txt" (
    for /f "tokens=1* delims=:" %%a in ('help^| findstr /n "^"') do @(
        set /a n+=1& <nul set /p ="!n!. %%b"| findstr /r /c:"^[0-9]*\. [A-Z]"|| echo.%%b&& set /a n-=1
    )
)
 
endlocal
exit /b
.
0
Эксперт Python
5403 / 3827 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
03.02.2017, 16:30 15
Цитата Сообщение от Garry Galler Посмотреть сообщение
Но, наверно, сделать как-то по другому можно.
Однострочник на основе поста #2
Windows Batch file
1
powershell "help.exe|%{$i=1}{if ($_ -match'(^[A-Z]{2,})'){$_ -replace $matches[0],('[{0:d2}] {1}' -f $i++, $matches[0])}}"
Добавлено через 27 минут
UPD: Забыл добавить блок else, без которого строки не подвергшиеся замене не выводятся:
Windows Batch file
1
powershell "help.exe| %{$i=1}{if ($_ -match'(^[A-Z]{2,})' ){$_ -replace $matches[0], ('[{0:d2}] {1}' -f $i++, $matches[0])} else {$_}}"
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2017, 16:30
Помогаю со студенческими работами здесь

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

Результат выполнения команды SYSTEMINFO записывается в файл в неверной кодировке (Windows XP)
Доброго времени суток. Возникла проблема с программой, которую пишу на Делфи. Под Windows 7 и...

Запись вывода результата выполнения команды ping в текстовый файл в нужной кодировке
Собственно для запоминания результата пинга в тхт использую следующюю команду: ping google.com &gt;...

Дан текстовый файл F. Переписать файл F в файл G, вставляя в конец каждой строки ее порядковый номер.
решите)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru