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

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

Xlsss 14-01-2021 17:56 2946202

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

Облазил все темы, но для себя не нашел ничего. Буду рад любой помощи.

Условие:

Есть каталог, для примера назовем его "test123", в нем находятся папки( для примера bx1 и bx2) и файлы(для примера test1, test2,test3,test4). Необходимо создать батник который будет удалять все кроме папки bx1 и файлов test1, test4. Лазя второй день по интернету создал вот такой строку кода, в которой удаляются только необходимые мне файлы.
А как удалить папки со всеми файлами внутри, тот же bx2 не могу понять. И как мне отключить окно подтверждения, что бы все удалялось без всплывающего окна?
Я чайник, заранее извиняюсь за возможно глупые вопросы.

@echo off
for /f "tokens=*" %%v in ('dir D:\ /b "test123\*.*"') do if NOT "%%v" == "test1.txt" if NOT "%%v" == "test2.txt" if NOT "%%v" == "test4.txt" del "test123\%%v"

DJ Mogarych 14-01-2021 18:55 2946213

Powershell:
Код:

dir C:\temp\test123 -Recurse |? name -notmatch "^bx1$|^test[14]" |del -Recurse -Force -Confirm:$false
CMD:
Код:

powershell -command "dir C:\temp\test123 -Recurse |? name -notmatch '^bx1$|^test[14]' |del -Recurse -Force -Confirm:$false"

Iska 14-01-2021 19:40 2946217

«Чистый» пакетный файл:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\Мои проекты\0332\0001\test123

pushd "%sSourceFolder%" || (
        echo Can't find source folder [%sSourceFolder%].
        exit /b 1
)

for /f "usebackq delims=" %%i in (
        `2^>nul dir /b /a:d  /o:n "*.*" ^| findstr.exe /i /v /l /b /e /c:"bx1"`
) do echo rd /s /q "%%~i"

for /f "usebackq delims=" %%i in (
        `2^>nul dir /b /a:-d /o:n "*.*" ^| findstr.exe /i /v /l /b /e /c:"test1" /c:"test4"`
) do echo del /f /q "%%~i"

popd

endlocal
exit /b 0

Для реального удаления уберите echo.

Xlsss 14-01-2021 20:07 2946225

Вложений: 2
Цитата:

Цитата Iska
«Чистый» пакетный файл:
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFolder=C:\Мои проекты\0332\0001\test123
pushd "%sSourceFolder%" || (
echo Can't find source folder [%sSourceFolder%].
exit /b 1
)
for /f "usebackq delims=" %%i in (
`2^>nul dir /b /a:d /o:n "*.*" ^| findstr.exe /i /v /l /b /e /c:"bx1"`
) do echo rd /s /q "%%~i"
for /f "usebackq delims=" %%i in (
`2^>nul dir /b /a:-d /o:n "*.*" ^| findstr.exe /i /v /l /b /e /c:"test1" /c:"test4"`
) do echo del /f /q "%%~i"
popd
endlocal
exit /b 0
Для реального удаления уберите echo. »

Прописал реальные каталог и имена файлов, так же находится все на другом диске. Убрал echo, почему то не работает...Что не так заполнил? Скрины прилагаю

Iska 14-01-2021 20:50 2946229

Цитата:

Цитата Xlsss
.Что не так заполнил? »

Как минимум:
Код:

…  ^| findstr.exe /i /v /l /b /e /c:"bx1" …

Xlsss 15-01-2021 09:45 2946264

Вложений: 1
Цитата:

Цитата Iska
Как минимум:
Код:
… ^| findstr.exe /i /v /l /b /e /c:"bx1" … »


Исправил, теперь указанный каталог не удаляется. Но файлы все трет. Скрин приложил

DJ Mogarych 15-01-2021 10:49 2946265

А мой вариант страшно попробовать?

Опиум 15-01-2021 14:41 2946300

Как то так)))
Код:

robocopy  /e /move /xd bx1  /xf test1 /xf test4 c:\test123 c:\2del
rd /s /q c:\2del


Iska 15-01-2021 15:19 2946310

Цитата:

Цитата Xlsss
Но файлы все трет. Скрин приложил »

Коллега, так файлы надо указывать с расширениями, в Вашем случае:
Код:

… ^| findstr.exe /i /v /l /b /e /c:"ascfdvc.txt" /c:"asdacvs.txt" /c:"dsgfsg.txt" …
То, что расширения у Вас не отображаются в Проводнике, не значит, что их нет.

P.S. Я вообще не понимаю, почему уже с Vista+ не сделали отображение расширений умолчанием.

alpap 16-01-2021 00:32 2946370

Код:

@echo off
set "d=test123"
set "d1=bx1"
set "f1=test1.txt"
set "f2=test4.txt"

:: Файлы
for /f "delims=" %%a in ('forfiles /p "%d%" /s /c "cmd /c if @isdir==FALSE echo @path"^|findstr /v /c:"%f1%" /c:"%f2%"') do >nul 2>&1 del /q "%%~a"
:: Папки
for /f "delims=" %%a in ('forfiles /p "%d%" /s /c "cmd /c if @isdir==TRUE echo @path"^|findstr /v /c:"%d1%"') do >nul 2>&1 rd /s /q "%%a"
pause& exit


Xlsss 16-01-2021 15:06 2946412

Всех благодарю, тему можно закрывать)


Время: 21:49.

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