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

Stalker_AleX333 26-02-2017 13:28 2714884

Удаление определенных подпапок и файлов в каталоге
 
Завис на таком несложном моменте, как удаление определенных подпапок и файлов в каталоге.

Нечто подобное можно сделать таким путем:
Код:

cd /d %имя папки% && rmdir /s /q %имя папки%
Но в данном случае смена директории наверное не нужна. cmd-шник запускается из основного каталога, а необходимые к удалению подпапки (не все. по имени) и некоторый набор файлов находятся в подкаталоге Data.

И да, я кажется сделал очень большую бяку, допустив опечатки в:
Код:

if %var%==3 del /F /S /Q /A "%Data\Textures%\*.*"
Итог - пошло массовое удаление файлов с диска на котором был запущен cmd-шник. Успех по-жизни...
Это называется, не пишите ничего в 2 часа ночи...

Iska 26-02-2017 14:20 2714899

Цитата:

Цитата Stalker_AleX333
а необходимые к удалению подпапки (не все. по имени) »

Какие именно «подпапки»?

Цитата:

Цитата Stalker_AleX333
некоторый набор файлов находятся в подкаталоге Data. »

Какой именно «набор»?

Stalker_AleX333 26-02-2017 14:56 2714908

Iska, писать будет долго, приложу скриншоты:




Там выделено и будущее расположение cmd-шника и содержимое папки Data из которой и нужно будет удалять определенные подпапки целиком и файлы по списку. (Возможно, стоит использовать внешний файл для этого списка?).

Iska 26-02-2017 15:04 2714912

Stalker_AleX333, и на что мне Ваши скриншоты?

Stalker_AleX333 26-02-2017 16:42 2714932

Iska, я что-то не так спрашиваю? Вроде, неясностей нет. Мне нужен образец кода удаляющий подпапки (Ну пусть будет textures и meshes) из каталога Data находящегося в одной директории с cmd-шником, но не трогающий его самого, а также файлы из этого же каталога (Например, test1, test2. Без привязки к их расширению)

Iska 26-02-2017 17:14 2714941

Не проверялось:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

pushd "%~dp0" && (
        rd /s /q "Data\textures"
        rd /s /q "Data\meshes"
        del /f /q "Data\test1" "Data\test2"
        popd
)

endlocal
exit /b 0

Что такое «Без привязки к их расширению»?

Stalker_AleX333 26-02-2017 18:27 2714960

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

Пока не работает, но может я сам в чем-то накосячил (кусок кода):
Код:

@Set /p var="> Введите ваш ответ и нажмите Enter: "

:: Загрузка Reshade
if %var%==5 cls && start https://reshade.me
exit

:: Загрузка обновлений
if %var%==4 cls && start https://yadi.sk/d/D54ZBhxj3ERxw6
exit

:: Полное удаление сборки
if %var%==3 cls && setlocal enableextensions enabledelayedexpansion

:: Удаляем папки сборки по списку
pushd "%~dp0" && (
        rd /s /q "Data\Interface"
        rd /s /q "Data\Meshes"
        rd /s /q "Data\Scripts"
        rd /s /q "Data\Sound"
        rd /s /q "Data\Textures"
        rd /s /q "Data\Video"
       
:: Удаляем плагины сборки по списку       
        del /f /q "Data\test1" "Data\test2"
        popd
)

endlocal
:: Удаляем сам cmd-шник (пока не включать!)
::&& del "%~dpnx0"
pause
exit


Iska 26-02-2017 19:09 2714968

Цитата:

Цитата Stalker_AleX333
имеется ввиду, что расширение этих файлов не должно иметь значения. »

Тогда замените одну строку на:
Цитата:

Цитата Stalker_AleX333
del /f /q "Data\test1.*" "Data\test2.*" »

А это:
Цитата:

Цитата Stalker_AleX333
Код:

…cls && start …
»

зачем? Для объединения используется один символ &. То есть, либо:
Код:

if %var%==5 cls & start https://reshade.me
либо:
Код:

if %var%==5 (
    cls
    start https://reshade.me
)

Для чего у Вас там куча exit вообще непонятно, поскольку в таком виде дальше первого exit выполнение не пойдёт.

Stalker_AleX333 26-02-2017 21:29 2714998

Iska, ну в нюансах я туго пока разбираюсь. Как-то не доводилось раньше ни bat-ники, ни cmd-шники писать. Там может быть куча ошибок.

Вообще я хотел, чтобы после завершения операции (кроме полного удаления) и последующего нажатия Enter окно возвращалось в исходное состояние, т.е. к списку возможных действий.

Весь код целиком
Код:

@cls

@echo ----------------------------------------------------------
@echo  Панель упраления для Silver Raven mods pack версии 1.1.2
@echo ----------------------------------------------------------
@echo.
@echo.

@echo 1. Копировать отсортированный список плагинов в AppData пользователя?
@echo.
@echo  Нажав цифру 1, вы подтверждаете свое согласие на копирование.
@echo.
@echo.
@echo.

@echo 2. Проверка наличия обновлений сборки. (Настоятельно рекомендуется проводить хотя-бы раз в месяц).
@echo.
@echo  Нажав цифру 2, вы подтверждаете свое согласие на переход по ссылке загрузки обновлений. (Откроется браузер)
@echo.
@echo.
@echo.

@echo 3. Очистка сборки от устаревших файлов. (Используйте после установки обновлений сборки)
@echo.
@echo  Нажав цифру 3, вы подтверждаете свое согласие на очистку сборки.
@echo.
@echo.
@echo.

@echo 4. Загрузка ReShade. (Не влияет на производительность игры, в отличии от ENB и SweetFX)
@echo.
@echo  Нажав цифру 4, вы подтверждаете свое согласие на переход по ссылке загрузки. (Откроется браузер)
@echo.
@echo.
@echo.

@echo 5. Полное удаление сборки. (Если вы хотите сохранить какие-либо файлы, сделайте это сейчас)
@echo.
@echo  Нажав цифру 5, вы подтвердите свое согласие на полное удаление сборки.
@echo  *ВСЕ файлы в подпапках Interface, Meshes, Scripts, Sound, Textures, Video, а также плагины сборки и данный cmd файл будут удалены!
@echo.
@echo.
@echo.

@Set /p var="> Введите ваш ответ и нажмите Enter: "

:: Копирование отсортированного списка плагинов
if %var%==1 (
cls
set "BoxOut=%LOCALAPPDATA%\Skyrim Special Edition"
set "FileIn=Plugins.txt"
if not exist "%BoxOut%" md "%BoxOut%"
copy /Y "%~dp0%FileIn%" "%BoxOut%\"
pause
)

:: Загрузка обновлений
if %var%==2 (
cls
start https://yadi.sk/d/D54ZBhxj3ERxw6
exit
)

:: Очистка сборки от устаревших файлов
if %var%==3 (
cls
del "Data\Textures\effects\fxwhitewater02.*" "Data\Meshes\actors\manekin"
pause
exit
)

:: Загрузка Reshade
if %var%==4 cls && start https://reshade.me
exit

:: Полное удаление сборки
if %var%==5 (
cls
setlocal enableextensions enabledelayedexpansion
:: Удаляем папки сборки по списку
pushd "%~dp0" & (
        rd /s /q "Data\Interface"
        rd /s /q "Data\Meshes"
        rd /s /q "Data\Scripts"
        rd /s /q "Data\Sound"
        rd /s /q "Data\Textures"
        rd /s /q "Data\Video"       
:: Удаляем плагины сборки по списку       
        del /f /q "Data\test1.*" "Data\test2.*"
        popd
)

endlocal
:: Удаляем сам cmd-шник (пока не включать!)
::&& del "%~dpnx0"
pause
exit
)


alpap 28-02-2017 03:13 2715242

Цитата:

Цитата Stalker_AleX333
после завершения операции (кроме полного удаления) и последующего нажатия Enter окно возвращалось в исходное состояние, т.е. к списку возможных действий »

Код:

@echo off
:g_menu
echo Список возможных действий
echo ----------------------------------
echo Операция 1        - [нажать 1]
echo Операция 2        - [нажать 2]
echo Завершение работы - [нажать 0]
echo ----------------------------------
set /p m=
if %m%==2 call :oper2
if %m%==1 call :oper1
if %m%==0 goto :eof
goto g_menu
pause& exit
 
:oper1
 echo Выполняем операцию 1
exit /b

:oper2
 echo Выполняем операцию 2
exit /b


mwz 28-02-2017 18:36 2715454

Цитата:

Цитата Stalker_AleX333
if %var%==3 del /F /S /Q /A "%Data\Textures%\*.*"
Итог - пошло массовое удаление файлов с диска на котором был запущен cmd-шник »

Ещё бы... Переменная окружения %Data\Textures% была пустая, произошёл переход к корню диска за счёт слэша после этой "конструкции" и стало удаляться *.*, (т.е. с учётом ключей — всё) относительно корня...

Stalker_AleX333 28-02-2017 23:51 2715532

Вопрос решен. Всем спасибо за помощь.


Время: 21:44.

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