Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
35 / 27 / 0
Регистрация: 11.10.2011
Сообщений: 380

Условие выполнения при разных размерах

23.10.2011, 22:35. Показов 4044. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать условие по поводу размера файла и расширения?

Например начали сканировать папку, первый файл взяли его имя, путь, проверили его на размер и имя, если размер меньше 30 мб и формат расширения любой кроме Rar, продолжаем дальше с ним работать если больше 30 мегабайт и rar делаем условие определенное над выполнением этого файла.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
echo off
echo начало
 
goto start
:p
set file=%1
echo обрабатываемый файл = %file%
set ves=%%~zi
 
if exist ves>30 000 
else (move %file% c:\2\)
 
exit /b
:start
for /f "delims=" %%i in ('dir /a-d /b c:\1\') do call :p "c:\1\%%i"
 
echo Проверка завершена
pause
это я примерно прикинул как это должно быть точно не могу понять как все совместить?
Цикл должен остаться точно так-как перебираем каждый файл.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.10.2011, 22:35
Ответы с готовыми решениями:

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

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

Ошибка выполнения медиа запросов - таблицы разваливаются на некоторых размерах экрана
Доброго времени суток, господа! Сижу вот уже до 3 часа ночи и не могу понять элементарного, просто хватаюсь за голову и не понимаю... В...

10
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
23.10.2011, 23:01
Windows Batch file
1
2
3
4
5
6
7
SetLocal enabledelayedexpansion
if not exist c:\2 md c:\2
for /f "delims=" %%i in ('dir /a-d /b c:\1\') do (
set name="c:\1\%%i"
if %%~zi gtr 31457280 (
if /i %%~xi==.rar move !name! c:\2\
))
Добавлено через 1 минуту
а вообще если вам только файлы rar нужно можно даже так
Windows Batch file
1
2
3
4
5
SetLocal enabledelayedexpansion
if not exist c:\2 md c:\2
for /f "delims=" %%i in ('dir /a-d /b c:\1\*.rar') do (
if %%~zi gtr 31457280 move "c:\1\%%i" c:\2\
)
1
35 / 27 / 0
Регистрация: 11.10.2011
Сообщений: 380
23.10.2011, 23:08  [ТС]
Прошу прощения, а можно прокомментировать ? А то чето не могу понять.

Добавлено через 5 минут
вот это
Windows Batch file
1
2
SetLocal enabledelayedexpansion
if not exist c:\2 md c:\2
зачем так делать ? о аналогии с++ с не могу понять как работает условие у Bat файлов
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
23.10.2011, 23:14
Про SetLocal enabledelayedexpansion
В обычном случае, чтобы узнать значение переменной окружения, надо воспользоваться конструкцией %переменная%. Однако, если значение переменной меняется внутри цикла и читается там же, то для корректной работы батника, нужно использовать команду setlocal enabledelayedexpansion и вместо символа "%", использовать символ "!". Иначе, значение переменной в цикле будет всегда одним и тем же - таким, каким было до входа в цикл.
(Ну или можно использовать процедуры которые я раньше использовал, но при большой вложенности циклов код очень путается поэтому мне теперь больше нравится SetLocal enabledelayedexpansion)

if not exist c:\2 md c:\2
Создаем каталог с которым работает команда move если его нет. Иначе если вдруг каталога не будет команда move не сработает вообще.

for /f "delims=" %%i in ('dir /a-d /b c:\1\') do (...)
получаем по очереди в переменную %%i имена файлов из каталога и выполняем над ними действия в цикле.

if %%~zi gtr 31457280
30Мб это 30*1024*1024=31457280 байт
%%~zi размер файла
если он больше выполняем условие

if /i %%~xi==.rar
%%~xi разрешение файла
если оно rar то выполняем условие

move !name! c:\2\
перемещаем файл в каталог c:\2

Bash
1
2
3
4
5
6
7
SetLocal enabledelayedexpansion
if not exist c:\2 md c:\2
for /f "delims=" %%i in ('dir /a-d /b c:\1\') do (
set name="c:\1\%%i"
if %%~zi gtr 31457280 (
if /i %%~xi==.rar move !name! c:\2\
))
Добавлено через 1 минуту
Не надо выдумывать аналогий с C++
смотрите справку
for /?
if /?
move /?
1
35 / 27 / 0
Регистрация: 11.10.2011
Сообщений: 380
23.10.2011, 23:18  [ТС]
Спасибо большое, вставлю в свою часть кода. Программировать на bat как-то сложней чем на с++. Просто привык больше к с, а тут приходится писать на bat. Кстати есть ограничение на длину bat файла ? Сколько строк?

Добавлено через 2 минуты
Справку по каждой команде смотрю, но пока не получается полностью понять. Раньше дальше copy cd.. dir не приходилось пользоваться ))) Еще раз спасибо
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
23.10.2011, 23:27
На длину бат файла ограничений нет.

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

Например если вместо if %n%==123 написать if %n%=123 то так и происходит.
1
35 / 27 / 0
Регистрация: 11.10.2011
Сообщений: 380
23.10.2011, 23:34  [ТС]
Если прописать и все проверить, по паузе, потом то можно паузы по-убирать или лучше вообще ват структуру проверять на наличие выполнения каждую команду "if errorlevel" ? Просто текста уже около 500 строк и то что Вы говорите ват файл может просто закрыться черевато.
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
24.10.2011, 00:01
Ну да если большой файл можно похитрее кое что придумать.
Можно сделать еще один батник вызывающий рабочий.
Bash
1
start cmd.exe /c "1.bat >log.txt"
Вот например у вас в коде файла 1.bat где то ошибка и окно консоли сразу закрывается даже нельзя заметить на какой строке программа вылетела. А с таким вызовом запишется весь лог какие строки выполнялись (конечно для проверки echo off быть не должно).
И просмотрев лог можно будет увидеть в конце ту строку которую не удалось обработать.
1
35 / 27 / 0
Регистрация: 11.10.2011
Сообщений: 380
24.10.2011, 00:17  [ТС]
Хм у меня программа сценария будет зациклена и смысла вывода в лог не имеет смысла. По моему сценарию программа опрашивает порядка 2000 директорий + еще около 150 временных директорий и после опроса начинает очередной опрос и смотреть лог по каждой команде. Сейчас я пробовал опрашивать 30 директорий на наличие файлов и вести обработку над каждым файлом и когда я вывел лог с echo on у меня получилось порядка 1000 строк правда + комментарии. Так это 30 директорий а что будет когда все 2000 директорий буду опрашивать в цикле ? в течении 12 часов ?

Добавлено через 3 минуты
Поэтому тут необходимо наверное в случае не выполнения какой-либо команды прекращать выполнение выводя паузу или именно в том месте где споткнулся записывать в лог. Пока не знаю как но думаю через if errorlevel
Кстати спасибо за Setlocal очень полезная команда.

Добавлено через 4 минуты
Тем более когда один бат файл запускается для разных структур каталогов.
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
24.10.2011, 01:21
if errorlevel это нужно для стандартных ошибок когда проверяется что команда прошла или нет.
А вначале когда есть ошибки в синтаксисе лучше в лог писать.
Ну при запуске видно будет если программа сразу закрывается значит где то косяки придется проверять код.
0
35 / 27 / 0
Регистрация: 11.10.2011
Сообщений: 380
24.10.2011, 20:43  [ТС]
Перепробовал все возможные варианты но чето код Ваш так и не заработал.
Переделал немого по-другому заработало.
Вот код
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
cls
goto start
:p
set dr=%~z1
rem pause
if %dr% lss  31457280 move %1 c:\2\
pause
exit /b
:start
if not exist c:\2 md c:\2
if not exist c:\2\1 md c:\2\1
for /f "delims=" %%i in ('dir /a-d /b c:\1\*.*') do call :p "c:\1\%%i"
pause
Спасибо atributz без твоего кода мой бы точно не заработал. А с твоим я так и не разобрался почему он не перемещает файлы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.10.2011, 20:43
Помогаю со студенческими работами здесь

условие выбора в ячейке при разных месяцах
Доброго времени суток. У меня вопрос следующий. я создал в ячейке через проверку список (12 месяцев) какую формулу мне написать чтобы при...

Условие выполнения опреции при наличии более двух условий
Подскажите пожалуйста! Есть значение (допустим Х) которое должно быть равно или меньше значения (допустим Y) и выполнять заданное действие...

Условие if. Как сделать повтор выполнения if-а, если условие не удовлетворяет требованиям в данный момент
Суть вопроса такова. В процессе работы программы запускается несколько потоков. Один из них выполняет бесконечный цикл, в котором каждую...

Изменение размерах при наведении мыши
Как можно изменить размеры, скажем, кнопки при наведении на неё мыши, и убрав фокус, вернуть до прежних размеров? Рыская нашел событие...

Программа вылетает при больших размерах массива
Задача заключается в том, что нужно сгенерировать массив, заменить в нем любые 3 элемента и найти сумму 3х максимальных элементов, НО по...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru