Войти

Показать полную графическую версию : [решено] Реализация условия в цикле


Roman_Norther@vk
25-11-2017, 17:06
Здравствуйте, помогите пожалуйста, весь день парюсь не могу сообразить...
Имеется код для поиска и удаления файла по маске с запросом, все работает, ищет, удаляет. При исполнении пакетного файла должен сформироваться текстовый файл с результатом в виде 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

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

megaloman
25-11-2017, 20:29
Roman_Norther@vk, ИМХО, загвоздка в if !x!==0
Надо !x!
Мне не нравится конструкция "%%~dpf%"
Последний % лишний
Я бы предпочёл написать set /a x+=1
или set /a x=!x!+1
@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

Roman_Norther@vk
26-11-2017, 04:52
Спасибо огромное! Все работает!




© OSzone.net 2001-2012