Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.91/32: Рейтинг темы: голосов - 32, средняя оценка - 4.91
Skif-N1
1 / 1 / 1
Регистрация: 26.11.2012
Сообщений: 24
1

Вывод имён файлов каталога в виде списка, способ представления которого определяется выбором пользователя

30.03.2013, 13:24. Просмотров 5891. Ответов 59
Метки нет (Все метки)

В этой программе мне не хватает кнопки Выход/Закрыть именно клавишей "ESC" (escape)
т.е. Нажал ESC - батник закрылся.
Другие советы по улучшению программы принимаються тоже)))
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Echo off
:m1
Echo Выберите способ представления оглавления:
Echo.
echo 1 - По времени создания (Возрастание)
echo 2 - Убывание
echo 3 - По размеру (Возрастание)
echo 4 - Убывание
echo Esc - exit 
echo.
Set /p choice=Ваш выбор: 
chcp 1251
if "%choice%"=="1" dir /b /od /s /a *.doc *.txt >1.txt
if "%choice%"=="2" dir /b /o-d /s /a  *.doc *.txt >2.txt
if "%choice%"=="3" dir /b /os /s /a *.doc  *.txt >3.txt
if "%choice%"=="4" dir /b /o-s /s /a *.doc  *.txt >4.txt
if ?????????????????? exit /b
if "%choice%"=="%" echo error
Echo.
:error
cls
goto m1
Echo.
pause
__
Работает стабильно при сохранении кода в 866(OEM) кодировке. Я использовал AkelPad 4.8.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2013, 13:24
Ответы с готовыми решениями:

Вывод списка имён каталогов и поиск в этих каталогах файлов с определёнными расширениями
Всем привет, прошу прощения , но в программировании я полный ноль, нужной мне инфы не нашел ( может...

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

Поиск на диске файлов с расширениями .txt и .docx и создание списка имён найденных файлов
Помогите, нужно создать bat файл, который ищет на диске файлы *.txt *docx а потом создаёт список с...

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

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

59
НеСказочник
58 / 46 / 13
Регистрация: 12.11.2012
Сообщений: 365
Записей в блоге: 2
30.03.2013, 13:35 2
А если не выпендриваться и вместо Esc использовать буковку X или C, как делают все простые смертные.
0
Skif-N1
1 / 1 / 1
Регистрация: 26.11.2012
Сообщений: 24
30.03.2013, 15:13  [ТС] 3
Цитата Сообщение от НеСказочник Посмотреть сообщение
А если не выпендриваться и вместо Esc использовать буковку X или C, как делают все простые смертные.
Я тоже так преподу предлагал, он сказал, нет. А без этого зачёт не получить(( Я всего 3ий день с батниками работаю... Коды и функции почти не знаю... Код клавиши Esc = 27 а как его применить, не знаю.
0
Dragokas
Эксперт WindowsАвтор FAQ
17009 / 7066 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
30.03.2013, 17:38 4
Это, что ж за преподаватель такой?
Скажите ему, что командная строка не поддерживает API.

Если ему нужно, пусть и подскажет.
Цитата Сообщение от Skif-N1 Посмотреть сообщение
Другие советы по улучшению программы принимаються тоже)))
Советов не может быть, пока нет четкого задания. Гадать по коду - к экстрасенсам.
0
Skif-N1
1 / 1 / 1
Регистрация: 26.11.2012
Сообщений: 24
30.03.2013, 18:26  [ТС] 5
Цитата Сообщение от Dragokas Посмотреть сообщение
Это, что ж за преподаватель такой?
Скажите ему, что командная строка не поддерживает API.

Если ему нужно, пусть и подскажет.
Он не подсказывает, у него свои методы обучения, он сказал что можно сделать выход на ESC. Помогите кто чем может.
0
Dragokas
Эксперт WindowsАвтор FAQ
17009 / 7066 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
30.03.2013, 19:23 6
Преподаватель просто так не дает невыполнимых задач. Это означает только одно, что он хочет от Вас денег.

Bash
1
2
3
4
5
@echo off
echo wscript.echo inputbox("",," ")>ESC.vbs
for /f "delims=" %%A in ('cscript //nologo ESC.vbs') do set ret=%%A
if not defined ret (Echo Нажата клавиша ESC) else (Echo Выбран %ret%)
pause
2
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
30.03.2013, 20:20 7
choice.com вполне себе понимает <Esc>. http://users.cybercity.dk/~bse26236/batutil/help/CHOICE_E.HTM
1
Dragokas
Эксперт WindowsАвтор FAQ
17009 / 7066 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
30.03.2013, 22:44 8
Очень специфический синтаксис, похож на обычный CMD, тем не менее есть значительные различия.

На счет Choice. Это будет работать для Choice.com (который, вероятно в Win 9x), но не для Choice.exe

CHOICE.com /C:12345←
CHOICE.exe /C:12345←

Добавлено через 2 минуты
Вот небольшой код на asm, который возвращает в Errorlevel код нажатой клавиши (не проверял):
Assembler
1
2
3
4
mov ah,7
int 21
mov ah,4c
int 21
1
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
30.03.2013, 23:01 9
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Dragokas Посмотреть сообщение
Это будет работать для Choice.com
Угу. Я выдрал из доси 6.22.

Добавлено через 14 минут
Заюзаем отладчик, раз препод так хочет:
Assembler
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@goto :batch
 
a100
xor ax,ax
int 16
mov al,ah
mov ah,4c
int 21
 
n getkey.com
r CX
0A
w
q
 
:batch
@echo off
:: пишем с помошью debug getkey.com, который возвращает сканкод
:: клавиши в %errorlevel%
DEBUG < %~sf0 >NUL 2>&1
:m1
chcp 1251
Echo Выберите способ представления оглавления:
Echo.
echo 1 - По времени создания (Возрастание)
echo 2 - Убывание
echo 3 - По размеру (Возрастание)
echo 4 - Убывание
echo Esc - exit 
::echo.
::Set /p choice=Ваш выбор: 
getkey
if "%errorlevel%"=="2" dir /b /od /s /a *.doc *.txt >1.txt
if "%errorlevel%"=="3" dir /b /o-d /s /a  *.doc *.txt >2.txt
if "%errorlevel%"=="4" dir /b /os /s /a *.doc  *.txt >3.txt
if "%errorlevel%"=="5" dir /b /o-s /s /a *.doc  *.txt >4.txt
:: <Esc> pressed
if "%errorlevel%"=="1" goto :done 
if "%errorlevel%"=="%" echo error
Echo.
:error
cls
goto m1
Echo.
:done
del getkey.com>nul
6
Skif-N1
1 / 1 / 1
Регистрация: 26.11.2012
Сообщений: 24
31.03.2013, 11:08  [ТС] 10
Огромное спасибо! Преподу теперь мозг вынесу))
Просто у него такой метод, он дал задание, и ждёт пока студент додумается и сделает, тем самым студент это усвоит, а если препод поможет, то студент забудет это через некоторое время.
0
НеСказочник
58 / 46 / 13
Регистрация: 12.11.2012
Сообщений: 365
Записей в блоге: 2
31.03.2013, 11:12 11
У меня у самого такой метод, но давать задания на темы далёкие от познаний студента - это признак низкого профессионализма. Задание должно быть таким, что бы студент его гарантированно сам решил и всё понял. Не больше не меньше.
0
Charles Kludge
31.03.2013, 11:22
  #12

Не по теме:

Мне читали Фортран-4. На практике применять не пришлось.:jokingly:

0
Eva Rosalene
T for Trans-
4050 / 1589 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
03.04.2013, 14:05 13
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Заюзаем отладчик, раз препод так хочет:
Ну так через это все можно написать. Ну или почти все. Особенно, если препод зверь ;-)
0
НеСказочник
58 / 46 / 13
Регистрация: 12.11.2012
Сообщений: 365
Записей в блоге: 2
03.04.2013, 14:08 14
Цитата Сообщение от FraidZZ Посмотреть сообщение
Ну так через это все можно написать. Ну или почти все. Особенно, если препод зверь ;-)
[SARKAZM] Ну тогда уж и C++ подключите с WinApi на пару. Чего уж там стесняться. [/SARKAZM]
0
Eva Rosalene
T for Trans-
4050 / 1589 / 303
Регистрация: 06.01.2013
Сообщений: 4,182
Завершенные тесты: 2
03.04.2013, 14:27 15
Цитата Сообщение от НеСказочник Посмотреть сообщение
Ну тогда уж и C++ подключите с WinApi на пару. Чего уж там стесняться.

Не по теме:

Лучше уж просто на С++ написать без батников и т.д. Но тз есть тз

0
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
03.04.2013, 19:29 16
Цитата Сообщение от НеСказочник Посмотреть сообщение
с WinApi на пару.
Легко. Вызываем MessageBox, возвращаем код нажатой кнопоцки в ERRORLEVEL:
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
@goto batch
 
a100
db 4d,5a,40,00,01,00,00,00,04,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,40,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 40,00,00,00,50,45,00,00,4c,01
db 01,00,e4,0e,5c,51,00,00,00,00
db 00,00,00,00,e0,00,0f,01,0b,01
db 01,45,00,02,00,00,00,02,00,00
db 00,00,00,00,00,10,00,00,00,10
db 00,00,00,10,00,00,00,00,40,00
db 00,10,00,00,00,02,00,00,01,00
db 00,00,00,00,00,00,04,00,00,00
db 00,00,00,00,00,20,00,00,00,02
db 00,00,fe,2c,00,00,03,00,00,01
db 00,10,00,00,00,10,00,00,00,00
db 01,00,00,00,00,00,00,00,00,00
db 10,00,00,00,00,00,00,00,00,00
db 00,00,2b,10,00,00,93,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,2e,66,6c,61,74,00,00,00
db be,00,00,00,00,10,00,00,00,02
db 00,00,00,02,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,60,00
db 00,e0,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,6a,23,6a,00,68,18,10,40
db 00,6a,00,ff,15,a8,10,40,00,50
db ff,15,88,10,40,00,cf,f0,e8,e2
db e5,f2,20,e8,e7,20,e1,e0,f2,ed
db e8,ea,e0,21,00,80,10,00,00,00
db 00,00,00,00,00,00,00,67,10,00
db 00,88,10,00,00,a0,10,00,00,00
db 00,00,00,00,00,00,00,74,10,00
db 00,a8,10,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,4b,45,52,4e,45
db 4c,33,32,2e,44,4c,4c,00,55,53
db 45,52,33,32,2e,44,4c,4c,00,00
db 90,10,00,00,00,00,00,00,90,10
db 00,00,00,00,00,00,00,00,45,78
db 69,74,50,72,6f,63,65,73,73,00
db 00,00,b0,10,00,00,00,00,00,00
db b0,10,00,00,00,00,00,00,00,00
db 4d,65,73,73,61,67,65,42,6f,78
db 41,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,00,00,00,00,00,00,00,00,00
db 00,0,0,0
 
n hel.com
r cx
400
w
q
 
:batch
@echo off
DEBUG < %~sf0 >NUL 2>&1
hel.com
if %ERRORLEVEL% == 6 set ret="IDYES"
if %ERRORLEVEL% == 7 set ret="IDNO"
if %ERRORLEVEL% == 2 set ret="IDCANCEL"
echo hel.com returns %ret%
del hel.com > nul

На FASM'e выглядит так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
format PE console 4.0 on 'stub.exe'
include 'win32a.inc'
 
 
        invoke  MessageBox, NULL, hello, NULL, 23h;MB_ICONQUESTION | MB_YESNOCANCEL
    invoke  ExitProcess, eax
 
hello   db  'Привет из батника!',0
data import
 
 library kernel32,'KERNEL32.DLL',\
     user32,'USER32.DLL'
 
 import kernel32,\
    ExitProcess,'ExitProcess'
 import user32, \
    MessageBox, 'MessageBoxA'
 
end data
Добавлено через 3 часа 39 минут
И да, возвращаясь к менюшкам/диалогам/чекбоксам/радиобоксам и прочим GUI'ёвым прибамбасам, которых так не хватает в TUI-консоли и батниках - есть такой dialog, первоначально писаный под Debian и форкнутый под FreeBSD(инсталляха на нём). Скриншоты здесь. Wiki(rus). Wiki(eng). Саму либу я форкнул под неТварь и под винду, прикрутив PDCurces. Сейчас наткнулся в архивах. Вобщем, форк ещё сырой, русских буковок не понимает(пока). Вопрос - допиливать или нет? Преальфа трёхлетней давности и пара примеров здесь.

Не по теме:

(Аттач на форуме глючит).

3
Dragokas
Эксперт WindowsАвтор FAQ
17009 / 7066 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
03.04.2013, 23:21 17
Прикольно, мне понравилось. Примеры работают у меня на Win7.
0
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
03.04.2013, 23:40 18
Dragokas, там самый большой прикол - возврат значений из всех этих разновидностей диалогов. Можно завести в батнике переменную DIALOG(32к max. size) и возвращать в неё... Пока в раздумьях.
0
Dragokas
Эксперт WindowsАвтор FAQ
17009 / 7066 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
27.08.2013, 18:47 19
1.asm
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
a100
xor ax,ax
int 16
mov al,ah
mov ah,4c
int 21
 
n getkey.com
r CX
0A
w
q


Bash
1
cdba 1.asm
Цитата Сообщение от Ответ
Microsoft (R) Windows Debugger Version 6.1.7601.17514 X86
Copyright (c) Microsoft Corporation. All rights reserved.

CommandLine: 1.asm
Cannot execute 'IDebugClient:CreateProcess(1.asm) failed [800700C1]
Может, что неверно в аргументах задал.

Аргументы
CDBA v0.78, Public Domain, japheth 2009.
CDB-like debugger based on MS Debug Engine API.
usage: CDBA [ options ] filename
options:
-2: run debuggee in separate console window
-c "<command>": executes command at first debugger prompt
-cf <file>: execute script file at first debugger prompt
-g: ignore initial breakpoint
-G: ignore final breakpoint
-j: set breakpoint at program entry
-lines: load line number info
-logo <logfile>: open new log file
-p <pid>: attach to a process
-pv: noninvasive attachs
-srcpath <source_path>: set source search path
-y <symbols_path>: set symbols search path
-z: assume file is a dump file
0
Malysh-ok
1 / 1 / 0
Регистрация: 17.10.2013
Сообщений: 57
17.10.2013, 00:24 20
Цитата Сообщение от Charles Kludge Посмотреть сообщение
@goto :batch a100 xor ax,ax int 16 mov al,ah mov ah,4c int 21 n getkey.com r CX 0A w q :batch @echo off :: пишем с помошью debug getkey.com, который возвращает сканкод :: клавиши в %errorlevel% DEBUG < %~sf0 >NUL 2>&1
Огромное спасибо!
Столкнулся с подобной проблемой, весь и-нет перерыл, не хотел через окна VBS делать... А сюда (точнее сначала в "шапку") случайно забрёл (чой-то еще искал)...
Специально зарегился, чтоб поблагодарить (ну и Dragokas, конечно тоже).

П.С. Не врубился, что нажать для "спасибо".
0
17.10.2013, 00:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2013, 00:24

Поиск файлов по списку имён и по заданным расширениям с выводом полных имён найденных в текстовый файл
Доброго времени суток! Стоит задача сделать батник. Для поиска файлов по списку имён (кириллица)...

Поиск и вывод на экран совпадающих имён файлов в двух папках, указанных пользователем
Всем привет, ребят есть проблема( Не шарю я в батниках, а тут как на зло еще подсунули задачку...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru