powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Хитрый вопрос по IF в пакетных файлах
11 сообщений из 11, страница 1 из 1
Хитрый вопрос по IF в пакетных файлах
    #33960465
Чупакабра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
cls
@echo off
cd % 1 
for %%f in (% 1 \*.*) do (
cls
@echo ______________________________________________  
@echo I В папке % 1  находится %%~nxf                
@echo ______________________________________________  
@echo I Какие действия будут производиться с файломI
@echo I                                            I
@echo I   1 .Копировать                              I
@echo I   2 .Переместить                             I
@echo I   3 .Удалить                                 I
@echo I   4 .Просмотр                                I
@echo I   5 .Пропустить                              I
@echo ______________________________________________
@echo I Введите  1 , 2 , 3  или  4  и нажмите ввод         I
@echo ______________________________________________
SET /P reply= 
rem set
rem pause
IF /I "%reply%"=="1" copy % 1 \%%~nxf % 2 \%%~nxf
IF /I "%reply%"=="2" move % 1 \%%~nxf % 2 \%%~nxf
IF /I "%reply%"=="3" erase % 1 \%%~nxf    
IF /I "%reply%"=="4" type % 1 \%%~nxf && pause
)


Программа запускается с двумя параметрами откуда и куда.
Например prog.bat c:\temp1 c:\temp2
Код вполне не хитрый, только отказавается работать.
Опытным путем было установленно,что переменная reply устанавливается,
в этом можно убедиться раскоментировав set и pause, значит проблема в IF.
Перерыл все что только можно. Мучает бессоница.
Условие "%reply%"=="1" просто отказывается работать.
Если закоментировать все IF кроме одного и подписать условие else то оно выполнится.
ПОМОГИТЕ ПОЖАЛУЙСТА!!!
...
Рейтинг: 0 / 0
Хитрый вопрос по IF в пакетных файлах
    #33960600
Чупокабра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну не ужели ни кто не соображает?!!
Блин так обидно... :(
...
Рейтинг: 0 / 0
Хитрый вопрос по IF в пакетных файлах
    #33960838
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вероятнее всего вина цикла for
проверьте - хоть reply и устанавливается - но правильно ли она устанавливается (соответствует ли выбору) ?
...
Рейтинг: 0 / 0
Хитрый вопрос по IF в пакетных файлах
    #33960862
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже точнее - проблема в круглых скобках.
При их использовании подстановка переменных происходит еще до того, как переменную изменили в блоке.
Решение - использовать "отложенное раскрытие переменных" - cmd надо запускать с опцией /V:ON и разыменоваывть переменные не %процентиком% а воцклицательным !знаком!
Тогда подстановка будет применена непосредственно в момент исполнения, т.е. в блоке.


P.S. А вообще батч лучше посылать лесом и переходить на WSH
...
Рейтинг: 0 / 0
Хитрый вопрос по IF в пакетных файлах
    #33961228
Фотография Палестинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--вероятнее всего вина цикла for
проверьте - хоть reply и устанавливается - но правильно ли она устанавливается (соответствует ли выбору) ?
Ты пробовал или абстрактно говоришь?
попробуй:

set /p reply =
@echo "%reply%"

зы. вобщем хз. пора на скрипты переходить праильно говорят :-)
...
Рейтинг: 0 / 0
Хитрый вопрос по IF в пакетных файлах
    #33961360
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не абстрактно. Во-первых пробел между reply и = ставить нельзя
автор
set /p reply =
@echo "%reply%"


разумеется все получится
но это тривиально

попробуй так:
автор
(
set /p reply=
@echo "%reply%"
)

и увидишь глюку

дело именно в блоке с круглыми скобками
решение я написал во вчерашнем посте.
...
Рейтинг: 0 / 0
Хитрый вопрос по IF в пакетных файлах
    #33963377
Чупакабра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас приду домой и обязательно все проверю.
Надеюсь что все получится :)
А запустить мой батник не ужели никто не пробовал???
Про скрипты. Они в данном случае не актуальны т.к. мне нужно именно бат. файлом это сделать.
Большое всем спасибо если все получится будет просто замечательно.
...
Рейтинг: 0 / 0
Хитрый вопрос по IF в пакетных файлах
    #33963519
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧупакабраА запустить мой батник не ужели никто не пробовал???

попробовал разик :-)
ЧупакабраПро скрипты. Они в данном случае не актуальны т.к. мне нужно именно бат. файлом это сделать.
Только если это лабораторка. В жизни надо на WSH переходить.
...
Рейтинг: 0 / 0
Хитрый вопрос по IF в пакетных файлах
    #33963636
contr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Набираем:
Код: plaintext
help cmd | find "expansion"
2) Внимательно читаем.
3) Пробуем:
Код: plaintext
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.
@echo off
cls
set #$@#=somesignature
if "!#$@#!"=="somesignature" goto GO
cmd /E:ON /V:ON /K % 0  % 1  % 2  % 3  % 4 
exit

:GO
@echo off
rem cd % 1 
@echo % 1 
for %%f in (% 1 \*.*) do (
rem cls
@echo ______________________________________________  
@echo I В папке % 1  находится %%~nxf                
@echo ______________________________________________  
@echo I Какие действия будут производиться с файломI
@echo I                                            I
@echo I   1 .Копировать                              I
@echo I   2 .Переместить                             I
@echo I   3 .Удалить                                 I
@echo I   4 .Просмотр                                I
@echo I   5 .Пропустить                              I
@echo ______________________________________________
@echo I Введите  1 , 2 , 3  или  4  и нажмите ввод         I
@echo ______________________________________________
SET /P REPLY= 
rem set re
rem pause
IF /I "!REPLY!"=="1" echo copy % 1 \%%~nxf % 2 \%%~nxf
IF /I "!REPLY!"=="2" echo move % 1 \%%~nxf % 2 \%%~nxf
IF /I "!REPLY!"=="3" echo erase % 1 \%%~nxf    
IF /I "!REPLY!"=="4" echo type % 1 \%%~nxf && pause
)
exit
...
Рейтинг: 0 / 0
Хитрый вопрос по IF в пакетных файлах
    #33963640
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null-- ЧупакабраА запустить мой батник не ужели никто не пробовал???

попробовал разик :-)
ЧупакабраПро скрипты. Они в данном случае не актуальны т.к. мне нужно именно бат. файлом это сделать.
Только если это лабораторка. В жизни надо на WSH переходить.
Лучше на sh, в крайнем случае, bash... )
...
Рейтинг: 0 / 0
Хитрый вопрос по IF в пакетных файлах
    #33963796
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlЛучше на sh, в крайнем случае, bash... )
базара нет :-)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Хитрый вопрос по IF в пакетных файлах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]