Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Реализация условия в цикле (http://forum.oszone.net/showthread.php?t=331450)

Roman_Norther@vk 25-11-2017 17:06 2780090

Реализация условия в цикле
 
Здравствуйте, помогите пожалуйста, весь день парюсь не могу сообразить...
Имеется код для поиска и удаления файла по маске с запросом, все работает, ищет, удаляет. При исполнении пакетного файла должен сформироваться текстовый файл с результатом в виде 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 2780127

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

Roman_Norther@vk 26-11-2017 04:52 2780205

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


Время: 21:55.

Время: 21:55.
© OSzone.net 2001-