Компьютерный форум 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=325836)

djuwa4 11-04-2017 19:18 2728392

Батник на удаление с исключением
 
Задача очень простая: удалять все файлы в корне диска D:\ и в корне его подпапки D:\Papka, за исключением файлов с расширением "Ярлык".

Вопрос! Как это сделать? PowerShell не возбраняю.

Я использую утилиту Del, но у неё нет возможности исключения (какие файлы не удалять), поэтому мой батник разросся, мне приходится указывать все расширения файлов которые нужно удалять. Это не удобно, особенно если юзеры начнут захламлять папки файлами с новым расширением которое я не указывал - это не удобно, хочется создать батник и забыть (если только он совсем перестанет отрабатывать).

Вот пример моего батника:

chcp 1251
Del D:\*.pptx /q
Del D:\*.xls /q
Del D:\*.docx /q
Del D:\*.xlsx /q
Del D:\*.pdf /q
Del D:\*.png /q
Del D:\*.exe /q
Del D:\*.jpg /q
Del D:\*.doc /q
Del D:\Papka\*.pptx /q
Del D:\Papka\*.xls /q
Del D:\Papka\*.docx /q
Del D:\Papka\*.xlsx /q
Del D:\Papka\*.pdf /q
Del D:\Papka\*.png /q
Del D:\Papka\*.exe /q
Del D:\Papka\*.jpg /q
Del D:\Papka\*.doc /q

Iska 11-04-2017 19:51 2728400

Ну, например:
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

call :DelFilesInFolder "D:\"
call :DelFilesInFolder "D:\Papka"

endlocal
exit /b 0

:DelFilesInFolder
        setlocal enableextensions enabledelayedexpansion
       
        set sSourceFolder=%~1
       
        pushd "%sSourceFolder%" && (
                for /f "usebackq delims=" %%i in (`2^>nul dir /a:-d /b "*.*"`) do if "%%~xi" neq ".lnk" echo del /f /q "%%~i"
                popd
        ) || (
                echo Can't find source folder [%sSourceFolder%].
                exit /b 1
        )
       
        endlocal
        exit /b 0


Цитата:

Цитата djuwa4
chcp 1251 »

Никаких chcp 1251. Просто сохраняйте пакетный файл в кодировке OEM/866.

djuwa4 12-04-2017 09:10 2728520

Iska! Спасибо вам огромное!!!!

djuwa4 12-04-2017 10:41 2728553

Думаю кому-то понадобится, скину ссылочки в которых описываются команды из батника:
setlocal (enableextensions, enabledelayedexpansion, endlocal) - http://ab57.ru/cmdlist/setlocal.html
call - http://ab57.ru/cmdlist/call.html
exit - http://ab57.ru/cmdlist/exit.html
Функция DelFilesInFolder - http://wm-help.net/lib/b/book/1239221356/168


Остальные буду дописывать в этом комментарии.

megaloman 12-04-2017 15:44 2728656

Хоть задача и решена, позволю себе добавить свой вариант
Вот вариант, который позволяет сделать несколько исключений, но можно и одно
Код:

@Echo Off
cls

Set "Exclude="" ".vbs" ".bat""

Call :DelList "%Exclude%" "Z:\*.*"

Call :DelList ".lnk" "Z:\Temp\*.*"

pause
GoTo :Eof

:DelList
        FOR %%i IN (%2) DO Call :DelExclude %1 "%%i"
GoTo :Eof

:DelExclude
        For %%e in (%~1) Do If /I "%~x2"==%%e GoTo :Eof
        Echo Del %2
GoTo :Eof

Для реальной работы уберите Echo перед Del

Iska 12-04-2017 16:02 2728664

Цитата:

Цитата djuwa4
Функция DelFilesInFolder - http://wm-help.net/lib/b/book/1239221356/168 »

Цитата:

После этого полный путь к удаляемому файлу и значение переменной Status печатаются в окне Блокнота с помощью метода SendKeys
Вот будет радости-то при попытке задействовать этот «метод» с кириллическими путями/именами. Создай текстовый файл, пиши в него, затем тупо отдай на откуп системе его открытие по ShellExecute().


Время: 14:33.

Время: 14:33.
© OSzone.net 2001-