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

Синтаксическая ошибка в коде для вывода меню

20.12.2011, 21:34. Показов 3551. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
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
echo off
 
echo Begin create files
 
for /L %%i in (1,1,5) do (
echo test > %1\%%i.txt
echo test > %1\%%i.doc
echo test > %1\%%i.rtf
echo test > %1\%%i.cpp
echo test > %1\%%i.c
)
pause 
echo Create files success
 
mkdir %1\TEXT
mkdir %1\WORD
mkdir %1\CPP
MOVE %1\*.doc %1\WORD\
MOVE %1\*.txt %1\TEXT\
MOVE %1\*.cpp %1\CPP\
MOVE %1\*.c %1\CPP\
MOVE %1\*.rtf %1\WORD\
 
pause
 
echo MENU
echo [If you want to Display data of Folders-4]
echo [If you want to Display data of Folder TEXT you have choose 1]
echo [If you want to Display data of Folder WORD you have choose 2]
echo [If you want to Display data of Folder CPP you have choose 3]
echo [EXIT - 5]
 
SET /P digit = "vvedite digit"
if %digit% =="1"
(
dir %1\TEXT\
)
else
 if %digit% == "2"
(
   dir %1\WORD\
)
else
 if %digit% == "3"
(
   dir %1\CPP\
)
else
if %digit% == "0"
(
goto EXIT
  
)
:EXIT
Не могу понять почему происходит синтаксическая ошибка после вывода меню.Задание вот.
Упорядочить содержимое каталога (указанного в командной строке пакетного файла)* следующим образом. Все файлы с расширением TXT переместить в каталог TEXT, все файлы с расширением RTF, DOC переместить в каталог WORD, все файлы с расширением CPP, C - в каталог CPP.
Таким образом, в каталоге должны остаться только подкаталоги. Затем с помощью команды SET вывести меню (просмотр, просмотр с подкаталогами, выход). Каталоги оформлять в режиме постраничного просмотра.

* Каталог который требуется отсортировать передается в виде параметра скипту.
К примеру:
Windows Batch file
1
script.bat D:\Catalog\Podkatalog
означает, что скипт должен отсортировать файлы в каталоге "D:\Catalog\Podkatalog".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2011, 21:34
Ответы с готовыми решениями:

Синтаксическая ошибка в коде для вычисления факториала
@echo off chcp 1251 >nul set /a x=1 :start if %1==0 echo "Факториал = 1" if %1==1 echo...

Синтаксическая ошибка в коде
подскажите что не так..пишет ошибку синтаксиса set/up var = "Enter 1 or 2 or 3:" if %var% == 1...

Синтаксическая ошибка в коде меню
Менял меню и в один "прекрасный" момент на сайте стало выдавать ошибку syntax error, unexpected...

Синтаксическая ошибка в коде
Есть ошибка синтаксиса в предпоследней строке - не пойму какая: def factor(arg1): if arg1...

15
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
20.12.2011, 22:28 2
Не буду разбираться в коде и задаче, но количество скобок меня смущает:
Windows Batch file
1
if %digit% =="1" (dir %1\TEXT\) else  (if %digit% == "2" (dir %1\WORD\) else (if %digit% == "3" (dir %1\CPP\) else (if %digit% == "0" goto EXIT)))
и я бы юзал:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
goto v%digit%
:posle_v
:v1
dir %1\TEXT\
goto posle_v
:v2
dir %1\WORD\
goto posle_v
:v3
dir %1\CPP\
goto posle_v
:v4
goto EXIT
0
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
21.12.2011, 19:17  [ТС] 3
Спасибо за подсказку, переделал, но все равно не работает.Посмотрите пожалуйста!У меня всегда первое условие срабатывает.Почему?И какие бы я цифры не вводил выводятся файлы в папке WORD. остальные нет!!!Помогите!!(
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
25
26
27
28
29
30
31
32
:start
CLS
echo MENU
echo [If you want to Display data of Folders-0]
echo [If you want to Display data of Folder TEXT you have choose 1]
echo [If you want to Display data of Folder WORD you have choose 2]
echo [If you want to Display data of Folder CPP you have choose 3]
echo [EXIT - 4]
 
SET /P Digit=
IF %Digit% =="1" (goto :text)
IF %Digit% =="2" (goto :word)
IF %Digit% =="3" (goto :cpp)
IF %Digit% =="4" (goto :exit)
:text
CLS
dir %1\TEXT\ 
pause
goto :start
:word
CLS
dir %1\WORD\
pause 
goto :start
:cpp
CLS
dir %1\CPP\
pause 
goto :start
:exit
echo good bay!!
exit
1
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
21.12.2011, 19:32 4
это извращение, тупое увеличение размера кода.
IF %Digit% =="1" (goto :text)
IF %Digit% =="2" (goto :word)
IF %Digit% =="3" (goto :cpp)
IF %Digit% =="4" (goto :exit)
юзай или IF или GOTO
2 варианта я тебе писал.
Зачем писать IF %Digit% =="1" (goto :text) когда можно написать goto v%Digit%

Добавлено через 3 минуты
Ну во-первых, что за пробел после %digit%, во-вторых цифры у тебя в кавычках, а в переменной ты их без кавычек вводишь, ни одно условие не подходит и оно идет дальше по коду, а т.к. у тебя после условий начинается код первого действия, он и выполняются. Юзай IF "%Digit%"=="1" (goto :text)
0
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
21.12.2011, 19:59  [ТС] 5
Сделал я сейчас по-вашему второму коду только pause добавил. все равно же говорю выводит только в папке TEST содержимое.Может там несколько переменных нужно или еще что-нибудь??
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
21.12.2011, 21:18 6
Отпишись по тексту, что я написал жирным шрифтом.

Добавлено через 4 минуты
эх ладно тебя
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
25
26
27
28
:start
CLS
echo MENU
echo [If you want to Display data of Folders-0]
echo [If you want to Display data of Folder TEXT you have choose 1]
echo [If you want to Display data of Folder WORD you have choose 2]
echo [If you want to Display data of Folder CPP you have choose 3]
echo [EXIT - 4]
SET /P Digit=
goto v%digit%
:exit
echo good bay!!
pause
exit
:v1
dir "%~1\TEXT\"
pause
goto start
:v2
dir "%~1\WORD\"
pause
goto start
:v3
dir "%~1\CPP\"
pause
goto start
:v4
goto EXIT
Работает?

Добавлено через 2 минуты
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
:start
echo MENU
echo [If you want to Display data of Folders-0]
echo [If you want to Display data of Folder TEXT you have choose 1]
echo [If you want to Display data of Folder WORD you have choose 2]
echo [If you want to Display data of Folder CPP you have choose 3]
echo [EXIT - 4]
SET /P Digit=
if "%Digit%"=="1" (dir "%~1\TEXT\"&pause)
if "%Digit%"=="2" (dir "%~1\WORD\"&pause)
if "%Digit%"=="3" (dir "%~1\CPP\"&pause)
if "%Digit%"=="4" (echo good bay!!&pause&exit)
CLS
goto start
Более короткий вариант
1
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
21.12.2011, 22:00  [ТС] 7
Спасибо большое за помощь!!я все-таки сам умудрился чтобы все заработало)только у меня путь там без кавычек и почему параметр в таком виде %~1 ??За что эта тильда отвечает?я просто написал
Bash
1
dir %1\WORD\
Эх(второй день только в командной строке разбираюсь(вообще не понимаю пригодится ли.Там еще нам 3 задачи задали труднее, в одной надо будет усовершенствовать эту же только файлы сами должны сортироваться исходя из расширения файла. не можете сказать в какой команде это сделать вообще?
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
21.12.2011, 22:33 8
что значит сортироваться?
move "cd\*.%pacwupenue%" "%racwupenue%"?

~ отвечает за убирание кавычек слева и справа от параметра
0
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
26.12.2011, 21:30  [ТС] 9
RIS, помоги пожалуйста с заданием!
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
echo Begin
 
attrib %1 report.txt
shift
set FILEOPAPA=%1
 
For %%I In ( %FILEOPAPA% ) Do Set root=%%~I (
echo file has been created > %root%
)
Вот код наваял! Задание вроде легкое но я не могу догадаться как в коммандной строке создать подобие массива??Задание!
Написать командный файл для установки атрибутов файлов.
Первым в списке фактических параметров указывается атрибут, затем список файлов. В командном файле использовать только один формальный параметр: %1.
Необходимо проверять существование файлов.
Вообщем нужно чтобы вводил допустим
Bash
1
scr.bat file1.txt file2.avi
и список файлов и для них должен атрибут выставляться.я могу конечно несколько раз такой код написать но нужно чтобы это автоматом вычислялось как-то...как это здесь сделать(
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
27.12.2011, 01:08 10
Не понял вас, в вашем примере использовано 2 параметра, а не один, а атрибут, который надо менять, вообще, не указан.

Не понял, зачем вам массив в этой задаче, но осуществлять массив можно так:
Windows Batch file
1
2
3
4
5
setlocal ENABLEDELAYEDEXPANSION
::Обнуление числового массива
for /l %%i in (0,1,100) do (set /a m%%i=0)
::Вывод значений переменных массива
for /l %%i in (0,1,100) do (echo !m%%i!)
Типа того, я сейчас не с своего компа, так что пока не в полную силу.
0
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
28.12.2011, 20:01  [ТС] 11
я там ошибся( нужно чтоб при вводе было так
Bash
1
script.bat +r file1.txt file2.avi file4.php.....
и так далее файлы и для всех должен установиться нужный атрибут!должна также проходить проверка на наличие этих файлов и параметр формальный должен быть %1 только один!...
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
29.12.2011, 18:51 12
параметр формальный должен быть %1 только один!
Bash
1
+r file1.txt file2.avi file4.php
и так далее файлы
У вас их как минимум 4

Добавлено через 10 минут
должна также проходить проверка на наличие этих файлов
Bash
1
if exist "file.txt" Действие_если_этот_файл_есть
должен установиться нужный атрибут
Bash
1
attrib %1 "%~2"
Тут надо поиграть с for /l %i in (2,1,9)
0
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
29.12.2011, 18:54  [ТС] 13
там же через shift сдвиг параметра можно сделать)в результате получится только %1)задание такое вот)просто допустим я могу несколько раз одно и то же написать. но это если я знаю заранее для скольких файлов мне нужно атрибут поставить....а вот как скрипт автоматически должен определять количество файлов.вот кстати нашел похожее что-то...только не совсем понятен этот код...
Windows Batch file
1
2
3
4
5
6
7
@echo off
IF NOT "%2" == "" (
attrib %*
FOR /F "usebackq tokens=1,2*" %%i In ('%*') Do (
IF NOT %%k == "" (call %0 %1 %%k)
)
)
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
29.12.2011, 18:57 14
ну попробуй
Windows Batch file
1
2
3
4
5
6
set /a q=1
:st
set /a q+=1
attrib %1 "%~2"
shift /2
if %q% leq 9 goto st
писал тут, не проверял
0
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
29.12.2011, 19:15  [ТС] 15
работает только там же опять %~2...последние 2 строчки не понял(
0
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
29.12.2011, 21:14 16
последние 2 строчки не понял(
Bash
1
2
shift /?
if /?
Ну ты юморной. Но сделай так.
Windows Batch file
1
2
3
4
5
6
7
8
set at=%~1
shift
set /a q=1
:st
set /a q+=1
attrib %at% "%~1"
shift
if %q% leq 9 goto st
1
29.12.2011, 21:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2011, 21:14
Помогаю со студенческими работами здесь

Синтаксическая ошибка в коде
Перерыла все топики на эту тему на форуме(( но не могу понять в чем дело и какая ошибка? <?php...

Синтаксическая ошибка в коде
Здравствуйте! Создаю базу данных для рудника.Хочу чтобы каждого исполнителя отсылало на...

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

Ошибка в программе для вывода меню
Нужно сделать раскрывающееся меню, но у меня даже обычное не получается.и так и сяк его кручу...вот...


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

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