PDA

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


Xlsss
14-01-2021, 17:56
Доброго времени суток.

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

Условие:

Есть каталог, для примера назовем его "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
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
«Чистый» пакетный файл:
@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
«Чистый» пакетный файл:
Код:
@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
.Что не так заполнил? »
Как минимум:
… ^| findstr.exe /i /v /l /b /e /c:"bx1" …

Xlsss
15-01-2021, 09:45
Как минимум:
Код:
… ^| findstr.exe /i /v /l /b /e /c:"bx1" … »


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

DJ Mogarych
15-01-2021, 10:49
А мой вариант страшно попробовать?

Опиум
15-01-2021, 14:41
Как то так)))
robocopy /e /move /xd bx1 /xf test1 /xf test4 c:\test123 c:\2del
rd /s /q c:\2del

Iska
15-01-2021, 15:19
Но файлы все трет. Скрин приложил »
Коллега, так файлы надо указывать с расширениями, в Вашем случае:
… ^| 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
@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
Всех благодарю, тему можно закрывать)




© OSzone.net 2001-2012