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

Devddd 28-03-2020 14:59 2914943

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


@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 2914946

А зачем вводить имена вручную? Чем обусловлена такая необходимость?

alpap 28-03-2020 16:02 2914947

Цитата:

Цитата Devddd
Vvedit imena failov, rosdelayja ich probelamy »

а если имена файлов имеют пробелы?

Iska 28-03-2020 17:45 2914955

DJ Mogarych, alpap, судя по формулировке и тексту в коде — лабораторка.

Devddd 28-03-2020 18:24 2914956

Есть условие, что названия файлов и их размещения задавать через командную строку.

megaloman 28-03-2020 20:49 2914967

Цитата:

Цитата Devddd
названия файлов и их размещения задавать через командную строку. »

Код:

@Echo Off
        FOR %%f IN (%*) Do Del "%%~f"
        Del %*
Exit /B

Цитата:

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

- Упрощение по идее alpap

alpap 28-03-2020 20:57 2914968

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 2914969

Спасибо большое

pedrosoft 07-04-2020 00:04 2916098

Всем привет! Чтобы не создавать новую тему спрошу в этой.

Есть такая структура каталогов:
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 2916113

Код:

@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 2916129

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 2916158

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 2916196

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

megaloman 07-04-2020 19:48 2916198

Цитата:

Цитата pedrosoft
А чтобы после вашего кода выполнить другой достаточно удалить последнюю команду Exit /B или удалять её в обоих местах? »

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

Iska 08-04-2020 22:08 2916358

Цитата:

Цитата pedrosoft
А чтобы после вашего кода выполнить другой… »

Располагайте его перед первым exit /b. Либо, действительно, делайте по аналогии отдельную процедуру и вызывайте её из указанного места.


Время: 16:46.

Время: 16:46.
© OSzone.net 2001-