Показать полную графическую версию : [решено] Удаление указанных файлов в заданной папке
Пытаюсь написать командный файл для уничтожения набора файлов в заданной папке. Смотря примеры, получилось что-то такое. Помогите исправить и покажите, как должно быть правильно, пожалуйста
@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
А зачем вводить имена вручную? Чем обусловлена такая необходимость?
Vvedit imena failov, rosdelayja ich probelamy »
а если имена файлов имеют пробелы?
DJ Mogarych, alpap, судя по формулировке и тексту в коде — лабораторка.
Есть условие, что названия файлов и их размещения задавать через командную строку.
megaloman
28-03-2020, 20:49
названия файлов и их размещения задавать через командную строку. »
@Echo Off
FOR %%f IN (%*) Do Del "%%~f"
Del %*
Exit /B
для вашего задания, собственно, кроме этого условия и команд-то никаких практически не нужно: » - Упрощение по идее alpap
Devddd, для вашего задания, собственно, кроме этого условия и команд-то никаких практически не нужно:
@echo off
echo Введите путь к папке с файлами& set /p spath=
echo Введите имена файлов, обрамляя их парными кавычками ["file.txt" "name 2.txt"]& set /p sname=
pushd "%spath%"
del %sname%
popd
pause
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.
А чтобы после вашего кода выполнить другой… »
Располагайте его перед первым exit /b. Либо, действительно, делайте по аналогии отдельную процедуру и вызывайте её из указанного места.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.