Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Реализация условия в цикле

Ответить
Настройки темы
CMD/BAT - [решено] Реализация условия в цикле

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Roman_Norther@vk
Дата: 25-11-2017
Здравствуйте, помогите пожалуйста, весь день парюсь не могу сообразить...
Имеется код для поиска и удаления файла по маске с запросом, все работает, ищет, удаляет. При исполнении пакетного файла должен сформироваться текстовый файл с результатом в виде Deleted (столько-то) files in directory (путь), и так столько строк, сколько было путей к файлам. В файл пишется такая строка, когда путь меняется, т.е. мы переходим к следующей директории. Проблема в том, что условие if в цикле верно при каждой итерации цикла for и каждый раз при нахождении файла, который надо удалить, в файл отчета пишется Deleted 0 files in directory, т.е. переменные не распознаются. Подскажите пожалуйста, что делать?
Скрытый текст
setlocal enabledelayedexpansion
echo Result > C:\Result.txt
set x=0
set /P maska="Vvedite masky:"
for %%d in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
if exist "%%d:\*" (
for /f "delims=" %%f in ('2^>nul dir /a-d/b/s "%%d:\%maska%"') do (set z2="%%~dpf%"
if x==0 (set z1="%%~dpf%")
if !z2! NEQ !z1! (>>C:\Result.txt echo Deleted !x! files in directory !z1! && set x=0 && set z1="%%~dpf%")
del /P "%%f"
if not exist "%%f%" (set /a x=x+1))
)
)
pause


О том, что последняя директория не запишется, я знаю, это предусмотрю после цикла

Отправлено: 17:06, 25-11-2017

 

Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Roman_Norther@vk, ИМХО, загвоздка в if !x!==0
Надо !x!
Мне не нравится конструкция "%%~dpf%"
Последний % лишний
Я бы предпочёл написать set /a x+=1
или set /a x=!x!+1
Мой вариант Вашей задачи, здесь меньше всяких If, труднее погрязнуть в логике
Код: Выделить весь код
@Echo Off
Cls
Set "LogFile=Z:\Result.txt"

Set /P maska="Input mask, please: >"

>"%LogFile%" (
Echo Rezult: Deleted files %maska%
Echo:
)

For %%d In (a b c d e f g h i j k l m n o p q r s t u v w x y z) Do (
	Call :DelFile "%%d:" "%maska%"
	For /f "usebackq delims=" %%f in (`2^>nul Dir /A:D /B /S "%%d:\"`) Do Call :DelFile "%%f" "%maska%"
)
Pause
GoTo :Eof

:DelFile
	Set /A N=0
	For /f "usebackq delims=" %%i in (`2^>nul Dir /A:-D /B "%~1\%~2"`) Do (
		Del /P "%~1\%%i"
		If Not Exist "%~1\%%i" Call Set /a N+=1
	)
	If %N% GTR 0 >>"%LogFile%" Echo Deleted %N% files in directory "%~1\"
GoTo :Eof
Ваш код плохо читается, используйте, пожалуйста, при размещении кода тег Code

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 25-11-2017 в 20:36.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:29, 25-11-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Спасибо огромное! Все работает!

Отправлено: 04:52, 26-11-2017 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Реализация условия в цикле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Цикл в Цикле deamon7 Скриптовые языки администрирования Windows 5 15-04-2023 09:04
C/C++ - Условия работы цикла 31echo_echo@vk Программирование и базы данных 0 29-11-2016 13:24
CMD/BAT - [решено] Условия внутри цикла for blackmane Скриптовые языки администрирования Windows 4 02-08-2012 10:01
CMD/BAT - Проверка условия Доктор Ливси Скриптовые языки администрирования Windows 11 19-01-2012 16:01
CMD/BAT - Условия на удоления в cmd zinteco Скриптовые языки администрирования Windows 1 24-03-2010 19:58




 
Переход