Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/47: Рейтинг темы: голосов - 47, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 24
1

Создать пакетный файл, который выводит на экран последовательность чисел от 1 до 249 (MS-DOS 6.22)

30.04.2013, 08:09. Показов 9524. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Прошу помощи! Есть задача: создать пакетный файл который выводит на экран последовательность чисел от 1 до 249.
Условия: среда разработки - MS-DOS 6.22 (не командная строка win).
Цикл FOR с параметром /L не работает.
Команда SET с параметром /A не работает.
Прошу указать направление в котором копать.
Как я понимаю надо каким-то способом организовать счетчик и цикл, и выводить на экран значение этого счетчика в каждой итерации.
Использую virtualbox с установленным дистрибутивом MS-DOS 6.22
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2013, 08:09
Ответы с готовыми решениями:

Создать метод, который выводит на экран максимальное из введенных n чисел
Написать программу, которая: 1) вводит с консоли число n> 0 2) затем вводит n чисел с консоли 3)...

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

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

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

19
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
30.04.2013, 12:16 2
Какие ещё условия есть? Проще всего заранее забить строку в файл и вывести его...
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 24
30.04.2013, 12:27  [ТС] 3
В том то и дело что нельзя использовать сторонние файлы. Только пакетник. Так сказать задача на изобретательность.
0
Модератор
Эксперт JS
5198 / 2080 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
30.04.2013, 12:43 4
Bash
1
2
3
4
echo.1
echo.2
...
echo.243
Других вариантов пока нет
1
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 24
30.04.2013, 12:48  [ТС] 5
Я тоже додумался до такого варианта
Но есть альтернативный вариант (точно есть!).
Эта задача не для практического применения, а для развития мозга
Число 249 взято для примера. А если надо вывести 10 000 значений? В этом вся суть.
Но все равно спасибо за вариант решения.
0
Модератор
Эксперт JS
5198 / 2080 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
30.04.2013, 14:13 6
Еще приходило в голову использовать что-то системное, где есть последовательность...

...А сделал так V
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
if exist file.txt (erase file.txt)
:again
<nul set /p x=#>>file.txt
for %%A IN (file.txt) DO (
 echo.%%~zA
 if %%~zA GEQ 249 (goto :out)
)
goto :again
:out
erase file.txt
pause>nul
exit /b
Протестил...
Работает!

Цитата Сообщение от latish86 Посмотреть сообщение
Как я понимаю надо каким-то способом организовать счетчик и цикл, и выводить на экран значение этого счетчика в каждой итерации.
Я в качестве счетчика использовал файл, добисывая в него новые символы.
Размер файла в байтах - %%~zA
0
1747 / 352 / 41
Регистрация: 15.10.2012
Сообщений: 549
30.04.2013, 16:01 7
Примерно так, для трёхзначных чисел
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
@echo off
if %1 == /1 goto _1
if %1 == /2 goto _2
if %1 == /e goto _e
 
for %%i in ( 0 1 2 3 4 5 6 7 8 9 ) do call %0 /1 %1 %%i
goto end
 
:_1
if %3 == 0 goto _1_0
for %%j in ( 0 1 2 3 4 5 6 7 8 9 ) do call %0 /2 %2 %3%%j
goto end
 
:_1_0
for %%j in ( 0 1 2 3 4 5 6 7 8 9 ) do call %0 /2 %2 %%j
goto end
 
:_2
if %3 == 0 goto _2_0
for %%k in ( 0 1 2 3 4 5 6 7 8 9 ) do call %0 /e %2 %3%%k
goto end
 
:_2_0
for %%k in ( 0 1 2 3 4 5 6 7 8 9 ) do call %0 /e %2 %%k
goto end
 
:_e
echo %3
if %2 == %3 exit
 
:end
Расширение батника должно быть .bat (не .cmd). Первый параметр - верхнее значение. Запускать из command.com, напрмер:
Код
command.com /c cnt.bat 123
Добавлено через 5 минут
Цитата Сообщение от FraidZZ Посмотреть сообщение
Работает!
Для DOS НЕ работает.
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 24
30.04.2013, 16:23  [ТС] 8
Цитата Сообщение от FraidZZ Посмотреть сообщение
Еще приходило в голову использовать что-то системное, где есть последовательность...

...А сделал так V
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
if exist file.txt (erase file.txt)
:again
<nul set /p x=#>>file.txt
for %%A IN (file.txt) DO (
 echo.%%~zA
 if %%~zA GEQ 249 (goto :out)
)
goto :again
:out
erase file.txt
pause>nul
exit /b
Протестил...
Работает!


Я в качестве счетчика использовал файл, добисывая в него новые символы.
Размер файла в байтах - %%~zA
Тестировали в командной строке cmd?
На виртуалке не получается запустить, в винде работает.

Smitis не мог бы ты добавить комментарии в код? Не могу уловить суть.
0
Модератор
Эксперт JS
5198 / 2080 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
30.04.2013, 17:01 9
Цитата Сообщение от Smitis Посмотреть сообщение
Для DOS НЕ работает.
Тогда так:
Почти как у тебя только короче.
Bash
1
2
3
4
5
6
7
8
9
10
11
@echo off
for %%A in (0 1 2) DO (
 for %%B IN (0 1 2 3 4 5 6 7 8 9) DO (
  for %%C IN (0 1 2 3 4 5 6 7 8 9) DO (
   echo.%%A%%B%%C
   if %%A%%B%%C==249 (goto :out)
  )
 )
)
:out
pause>nul
Добавлено через 2 минуты
Возможно на виртуалке с ДОС не сработает echo.%%A%%B%%C
Замените ее на echo %%A%%B%%C
2
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 24
30.04.2013, 17:30  [ТС] 10
Не работает. Проблема либо в синтаксисе, либо какие-то команды просто не работают.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
30.04.2013, 18:27 11
Никаких модификаторов для переменной цикла типа %%~zA в DOS'е нет, скобки использовать нельзя, вложенные for'ы запрещены и ограничение на длину строки в bat файле - 127 символов или около того. Тут совсем печаль...
debug.exe можно использовать или это тоже как сторонний файл?

Добавлено через 6 минут
И можно ли создавать на диске файлы в процессе выполнения?
0
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 24
30.04.2013, 18:52  [ТС] 12
Цитата Сообщение от Somebody Посмотреть сообщение
Никаких модификаторов для переменной цикла типа %%~zA в DOS'е нет, скобки использовать нельзя, вложенные for'ы запрещены и ограничение на длину строки в bat файле - 127 символов или около того. Тут совсем печаль...
debug.exe можно использовать или это тоже как сторонний файл?

Добавлено через 6 минут
И можно ли создавать на диске файлы в процессе выполнения?
debug.exe использовать можно. В процессе выполнения файлы создавать можно.
Под сторонними файлами я понимал заранее созданные файлы (не системные).
0
1747 / 352 / 41
Регистрация: 15.10.2012
Сообщений: 549
30.04.2013, 19:32 13
Цитата Сообщение от latish86 Посмотреть сообщение
Smitis не мог бы ты добавить комментарии в код? Не могу уловить суть.
Три цикла, каждый раз батник вызывает сам себя, передавая параметрами текущие перебранные цифры и ключи /1 /2 /e чтобы различать вызовы. На последнем вызове вывод и проверка на завершение. Проверки вида if %3 == 0 goto _2_0 чтобы отсечь незначащие ведущие нули. Иначе можно сделать чуть короче.

Возможно на виртуалке с ДОС не сработает echo.%%A%%B%%C
Замените ее на echo %%A%%B%%C
На линейке NT можно проверять запуская из command.com, виртуалки не нужны. И как раз echo. будет работать. Это старый приём, ещё ДОСовский.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
30.04.2013, 19:43 14
Если есть debug, то можно выполнить произвольный код. Если влезет по длине в строчку, то можно без дополнительных файлов, если не влезет - через файл.
Если нет debug'а, но можно создавать файлы, то всегда можно создать .com файл, который делает всё, что надо. Только тут надо постараться с подбором инструкций, чтобы не было всяких нехороших символов.
В любом случае, без этого получилось:
Код
@echo off
set d0=0
set d1=x
set d2=x
:next
if not %d2%==2 goto :print
if not %d1%==5 goto :print
if not %d0%==0 goto :print
goto :done
:print
if %d1%==x echo %d0%
if %d1%==x goto :inc
if %d2%==x echo %d1%%d0%
if %d2%==x goto :inc
echo %d2%%d1%%d0%
:inc
if %d0%==9 goto :carry0
if %d0%==8 set d0=9
if %d0%==7 set d0=8
if %d0%==6 set d0=7
if %d0%==5 set d0=6
if %d0%==4 set d0=5
if %d0%==3 set d0=4
if %d0%==2 set d0=3
if %d0%==1 set d0=2
if %d0%==0 set d0=1
goto :next
:carry0
set d0=0
if %d1%==9 goto :carry1
if %d1%==8 set d1=9
if %d1%==7 set d1=8
if %d1%==6 set d1=7
if %d1%==5 set d1=6
if %d1%==4 set d1=5
if %d1%==3 set d1=4
if %d1%==2 set d1=3
if %d1%==1 set d1=2
if %d1%==0 set d1=1
if %d1%==x set d1=1
goto :next
:carry1
set d1=0
if %d2%==1 set d2=2
if %d2%==x set d2=1
goto :next
:done
pause
Цитата Сообщение от Smitis Посмотреть сообщение
На линейке NT можно проверять запуская из command.com, виртуалки не нужны.
Этот виндовый command.com похож на обёртку cmd.exe, он нормально переваривает весь недосовский синтаксис.
1
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
30.04.2013, 19:52 15
Если что, вот Создать файл размером 1 MB
анализ того, что не работает и где взять для экспериментов DOS под Винду.
Самому пока кумекать некогда.
0
1747 / 352 / 41
Регистрация: 15.10.2012
Сообщений: 549
30.04.2013, 23:12 16
Цитата Сообщение от Somebody Посмотреть сообщение
Этот виндовый command.com похож на обёртку cmd.exe, он нормально переваривает весь недосовский синтаксис.
Система не x64 случаем? Под XP/Win7 32 обычный command.com. Без расширений. Даже проблема та же всплывает "Out of environment space".
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
01.05.2013, 11:41 17
Цитата Сообщение от Smitis Посмотреть сообщение
Система не x64 случаем? Под XP/Win7 32 обычный command.com. Без расширений. Даже проблема та же всплывает "Out of environment space".
Нет, XP 32-битный. Ограничения некоторые есть: длинные имена не понимает, строка больше 127 символов не вводится. Но если написать for /?, справка на несколько экранов виндовая, да и скобки нормально понимает.
0
1747 / 352 / 41
Регистрация: 15.10.2012
Сообщений: 549
02.05.2013, 02:58 18
Цитата Сообщение от Somebody Посмотреть сообщение
Нет, XP 32-битный. Ограничения некоторые есть: длинные имена не понимает, строка больше 127 символов не вводится. Но если написать for /?, справка на несколько экранов виндовая, да и скобки нормально понимает.
Да, действительно, справка выводится та же, что и в cmd. Но сейчас на всякий случай проверил - ничего из синтаксиса cmd для for не поддерживается. Syntax error и всё. Да и другие команды тоже.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
02.05.2013, 11:34 19
Цитата Сообщение от Smitis Посмотреть сообщение
Но сейчас на всякий случай проверил - ничего из синтаксиса cmd для for не поддерживается. Syntax error и всё.
for /l работает нормально, например.
0
1747 / 352 / 41
Регистрация: 15.10.2012
Сообщений: 549
02.05.2013, 13:17 20
Забавно. Если выполнять команды из command.com в интерактивном режиме, в том числе и батники, работает аналогично cmd.exe. Если выполнить батник через command /c test.bat то работает как положено, т.е. как в "чистом ДОС". Даже без расширений, которые были добавленны в Win9x (без длинных имён, без относительных путей вида ....). Справку тоже нужно смотреть command /c for /?

Так что, эмуляторы не нужны.

П.С.
В голову не пришло выполнять команды в интерактивном режиме из command.com
2
02.05.2013, 13:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2013, 13:17
Помогаю со студенческими работами здесь

Создать пакетный файл, который генерирует случайное число в пределах 0-100...
Парни помогите, нужно создать пакетный файл,который генерирует случайное число в пределах 0-100 и...

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

Создать пакетный файл 1.bat, который выполняет следующее задание: если каталог, имя которого передается первым
Создать пакетный файл 1.bat, который выполняет следующее задание: если каталог, имя которого...

Выводит на экран последовательность чисел
Выводит на экран последовательность чисел от 10 до 70 (в последовательности должны отсутствовать...

Создать цикл который выводит число на экран.
Надо создать цикл что бы он выводил число на экран, если число отрицательное выводил и его по...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru