Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
1

Почему он работает

20.02.2018, 21:07. Показов 1094. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ниже код.
Показывает файлы в указаном каталоге.Если файлов нет,то батник прекращает работу.
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
Setlocal EnableDelayedExpansion
for  %%a in ("%userprofile%\desktop\batch\1\*.*" "%userprofile%\desktop\batch\2\*.*") do (
echo %%a
if not defined %%a (set b=1) 
)
if not !b!==1 (exit /b)
pause
В коде не вижу логику.Потому что if not означает если это ложно.То есть строка
Windows Batch file
1
if not defined %%a (set b=1)
гласит:если %%а не существует ,то присвоить переменной b единицу.
Допустим,в 1 каталоге,файлов нет.Должно присваиваться единица.Во втором есть файл,и переменная %%а получает файл.Цикл заканчивает работу и происходит второе условие.Если единица не равна единице,то выход.Выхода не происходит.На экран выводится путь до файла.
ВТорой вариант.Это когда в обоих каталогах нет файлов.А если нет файлов ,то переменной b должна присваиваться единица.Но фак.Она не присваивается.Потому что происходит выход ,т.е. происходит срабатывание последнего условия.Если прописать команду echo в последнее условие,то можно наблюдать за тем,как переменная b пуста.
Я не могу понять.Как этот код может правильно работать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2018, 21:07
Ответы с готовыми решениями:

Почему смена текста работает только один раз? Что неправильно в коде и почему?
Нужно чтобы при щелчке мыши на поверхности кнопки текст метки Label изменялся на текст окна...

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

Не работает изменение, не могу понять почему, Update не работает, ошибку выдает
Помогите, изменение с помощью button string u =...

Ноутбук работает только с Wi Fi роутера дома, в кафе не работает и везде. Почему?
Подскажите пожалуйста, почему у меня ноутбук с виндой 7, работает вай фай только дома с роутера. А...

12
90 / 84 / 42
Регистрация: 27.09.2015
Сообщений: 316
20.02.2018, 22:43 2
Цитата Сообщение от ZoOoO Посмотреть сообщение
Допустим,в 1 каталоге,файлов нет.Должно присваиваться единица.
Не должна. Если в первом каталоге файлов нет, то выражение после do выполняться не будет.
Выражение после do вы полняется только когда в переменную цикла %%а что-то помещается, а туда ничего не помещается, если в первом каталоге файлов нет.

Добавлено через 1 минуту
возможно это обфускация.
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
20.02.2018, 22:50  [ТС] 3
Великолепно.
Во второй папке есть файлы.Единица тоже не присваивается.Но условие не срабатывает.НА экран выводится содержимое второго каталога)
0
90 / 84 / 42
Регистрация: 27.09.2015
Сообщений: 316
20.02.2018, 23:02 4
ZoOoO, вы серьёзно? ) - Я не понимаю..
Цитата Сообщение от ZoOoO Посмотреть сообщение
Во второй папке есть файлы.Единица..
.. присваивается и условие в седьмой срабатывает - Если 1 не равна 1 завершить программу - т.к. единица равна единице, программа не завершается и мы видим паузу
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
20.02.2018, 23:11  [ТС] 5
Почему единица?
Там уже условие.Если переменной %%а нет ,то тогда единица.
0
90 / 84 / 42
Регистрация: 27.09.2015
Сообщений: 316
20.02.2018, 23:20 6
А переменная %%a есть?
Данная конструкция %%tраскрывается в значение.. это не переменная
Windows Batch file
1
2
if not defined %%t exit /b
:: если не определена переменная c:\users\guest завершить программу
1
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
20.02.2018, 23:26  [ТС] 7
Ну как бы да.В справке пишут,что это переменная.

Добавлено через 2 минуты
Ну ладна.Сейчас проверю,присвою через set
0
90 / 84 / 42
Регистрация: 27.09.2015
Сообщений: 316
20.02.2018, 23:30 8
Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
setlocal enabledelayedexpansion
for %%t in (1 2 userprofile username) do (
    if defined %%t (
        echo.переменная %%t определена и содержит в себе !%%t!
    ) else (
        echo.Переменная %%t НЕ определена и значения не имеет
    )
)
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
20.02.2018, 23:33  [ТС] 9
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
Setlocal EnableDelayedExpansion
for  %%a in (1) do (
rem echo %%a
set V=%%a
echo !V!
if  defined !V! (set b=1) 
)
 echo if not !b!==1 (echo 1)
pause
В 9 строке должна быть единица,хотя ее нет..
0
90 / 84 / 42
Регистрация: 27.09.2015
Сообщений: 316
20.02.2018, 23:37 10
Ну можно сказать, что предидущим постом я предугадал ваш в посте номер 8 ответ навопрос из 9го
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
20.02.2018, 23:39  [ТС] 11
НУ я перменую создал ведь.
set V=%%a
переменная V
0
90 / 84 / 42
Регистрация: 27.09.2015
Сообщений: 316
20.02.2018, 23:40 12
Лучший ответ Сообщение было отмечено ZoOoO как решение

Решение

Windows Batch file
1
2
if  defined !V! (set b=1)
:: если переменная 1 определена, существует, то (присвоить переменной b единицу)
1
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
20.02.2018, 23:46  [ТС] 13
А что ,разве она не определена?
Так.Я сча уберу !

Добавлено через 3 минуты
Понятно.А нельзя было сразу написать.
Мальчик,у тебя неправильный синтаксис.
0
20.02.2018, 23:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2018, 23:46
Помогаю со студенческими работами здесь

Почему в iPhone не работает нажатие на телефонный номер, а в Android работает?
Здравствуйте! Почему если открыть на iPhone WEB сайт, на котором отображают телефонный номер для...

Почему один и тот-же код в WindowsForms работает, а в Web не работает?
Здравствуйте, подскажите почему один и тот-же код в WindowsForms работает, а в Web не работает....

Не работает удаление пробелов в строке! Подскажите пожалуйста, почему не работает?
Здравствуйте! Скажите пожалуйста, почему не работает данный код; должно брать строку, которую ввёл...

Почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает
почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает. Имею...


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

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