PDA

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


Devddd
28-03-2020, 14:59
Пытаюсь написать командный файл для уничтожения набора файлов в заданной папке. Смотря примеры, получилось что-то такое. Помогите исправить и покажите, как должно быть правильно, пожалуйста


@echo off
setlocal enabledelayedexpansion
set /p "question=Vvedit imena failov, rosdelayja ich probelamy: "
set /p "question2=Vvedit razpolozchenyye failov:"
for /F "tokens=* delims= " %%h in ("%question%")
do for /D %%d in ("\\%%h\%question2%")
del "%%d" /s /q
pause
exit

DJ Mogarych
28-03-2020, 15:34
А зачем вводить имена вручную? Чем обусловлена такая необходимость?

alpap
28-03-2020, 16:02
Vvedit imena failov, rosdelayja ich probelamy »
а если имена файлов имеют пробелы?

Iska
28-03-2020, 17:45
DJ Mogarych, alpap, судя по формулировке и тексту в коде — лабораторка.

Devddd
28-03-2020, 18:24
Есть условие, что названия файлов и их размещения задавать через командную строку.

megaloman
28-03-2020, 20:49
названия файлов и их размещения задавать через командную строку. »
@Echo Off
FOR %%f IN (%*) Do Del "%%~f"
Del %*
Exit /B

для вашего задания, собственно, кроме этого условия и команд-то никаких практически не нужно: » - Упрощение по идее alpap

alpap
28-03-2020, 20:57
Devddd, для вашего задания, собственно, кроме этого условия и команд-то никаких практически не нужно:

@echo off
echo Введите путь к папке с файлами& set /p spath=
echo Введите имена файлов, обрамляя их парными кавычками ["file.txt" "name 2.txt"]& set /p sname=

pushd "%spath%"
del %sname%
popd
pause

Devddd
28-03-2020, 21:05
Спасибо большое

pedrosoft
07-04-2020, 00:04
Всем привет! Чтобы не создавать новую тему спрошу в этой.

Есть такая структура каталогов:
D:\IS\users\
D:\IS\users\Config\
D:\IS\users\Config\TEST
D:\IS\users\Home\
D:\IS\users\Home\TEST
D:\IS\users\Temp\
D:\IS\users\Temp\TEST

Как удалить из каталогов Config, Home, Temp другие подкаталоги, оставив подкаталог TEST?

Нашел два варианта, но не получилось их модифицировать, а в текущем виде они удаляют все каталоги из D:\IS\users\

for /d %%i in (D:\IS\users\*) do (
echo %%~nxi | findstr /v "%tapult%" 1>nul && rd /s /q "%%i"
)



Set Target=D:\IS\users\
Set NoDelete=TEST

For /F "tokens=*" %%D In ('Dir %Target% /A:D /B') Do (
If /I Not "%%D"=="%NoDelete%" (RD /S /Q "%Target%\%%D")
)

megaloman
07-04-2020, 07:56
@Echo Off
Call :DelDir "D:\IS\users\Config" "Test"
Call :DelDir "D:\IS\users\Home" "Test"
Call :DelDir "D:\IS\users\Temp" "Test"
Exit /B

:DelDir
If Not Exist "%~1" (Echo !!! %1 not found &Exit /B 1)
FOR /F "usebackq delims=" %%d IN (`2^>nul Dir /B /A:D "%~1"`) DO (
If /I Not "%%~d"=="%~2" Rd /S /Q "%~1\%%d"
)
Exit /B

pedrosoft
07-04-2020, 11:19
megaloman, спасибо! а возможно ли более универсальное решение? Например не указывать каталоги:
D:\IS\users\Config\
D:\IS\users\Home\
D:\IS\users\Temp\

а сказать скрипту пройтись по подкаталогам каталога D:\IS\users\ и удалить в этих подкаталогах все папки, отличные от TEST? В принципе, если так будет легче составить логику, можно удалить и сами каталоги Config, Home, Temp, если в них не будет найден подкаталог TEST.

megaloman
07-04-2020, 14:53
pedrosoft, Я правильно понимаю, в D:\IS\users\ есть много папок. В этих папках надо убить все подпапки, корме TEST?@Echo Off
Set "BoxIn=D:\IS\users"
Set "Exclude=Test"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:D "%BoxIn%"`) DO (
Call :DelDir "%BoxIn%\%%~f" "%Exclude%"
)
Exit /B

:DelDir
If Not Exist "%~1" (Echo !!! %1 not found &Exit /B 1)
FOR /F "usebackq delims=" %%d IN (`2^>nul Dir /B /A:D "%~1\"`) DO (
If /I Not "%%~d"=="%~2" Rd /S /Q "%~1\%%~d"
)
Exit /B

pedrosoft
07-04-2020, 19:37
megaloman, папок всего 3, просто не хотелось привязываться к их именам. Спасибо, работает!
А чтобы после вашего кода выполнить другой достаточно удалить последнюю команду Exit /B или удалять её в обоих местах?

megaloman
07-04-2020, 19:48
А чтобы после вашего кода выполнить другой достаточно удалить последнюю команду Exit /B или удалять её в обоих местах? »Низззььяяя нигде!
Структура кода, как и в нормальном языке программирования (с некоторой долей условности):
До первого exit идёт так называемая главная часть программы. Там могут вызываться процедуры, которые определяются ниже. Если что-то дописывать, то там.
После первого exit идёт первая процедура, которая завершается своим exit. Если Вы нарисуете свои процедуры, будьте добры располагать их после любого exit в моём коде.
Конкретно, в главной части оего кода в цикле for вызываем (call) процедуру DelDir.

Iska
08-04-2020, 22:08
А чтобы после вашего кода выполнить другой… »
Располагайте его перед первым exit /b. Либо, действительно, делайте по аналогии отдельную процедуру и вызывайте её из указанного места.




© OSzone.net 2001-2012