Показать полную графическую версию : Удаление файлов и папок по списку.
passstrada
20-10-2019, 21:01
Есть список с путями к файлам и папкам которые нужно удалить. Пример:
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_ground_l_1_dust.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_ground_l_2_dust2.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_ground_m_1_dust.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_ground_m_2_dust2.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_ground_s_1_dust.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_ground_s_2_dust2.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_stone_l_1_dust.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_stone_l_2_dust2.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_stone_m_1_dust.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_stone_m_2_dust2.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_stone_s_1_dust.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_stone_s_2_dust2.yaml.dvpl
Data/3d/Configs/Particles/31_lumber_lm_night
Data/3d/Configs/Particles/31_lumber_lm_night/chassis_effects
Нужно создать .bat который проверяет что в каталоге есть папка Data, если она имеется выполнить удаление файлов и папок по списку txt или log (путь под спойлером).
Есть список с путями »
С относительными путями (кстати, почему разделитель путей в формате POSIX?). Осталось понять, относительно чего?
Пример: »
Ещё лучше будет упаковать «список с путями к файлам и папкам» в архив и приложить к сообщению.
Нужно создать .bat который проверяет что в каталоге есть папка Data, »
Тот же вопрос — где нужно искать каталог Data? По уму — в текущем каталоге. Но Вам, вероятно, понадобится искать в том каталоге, куда Вы поместите пакетный файл, так?
выполнить удаление файлов и папок по списку »
Судя по примеру,
Удаление каталога .\Data\3d\Configs\Particles\22_italy_it\chassis_effects не предполагается, так?
Удаление каталога/файла .\Data\3d\Configs\Particles\31_lumber_lm_night\chassis_effects бессмысленно, потому как на предыдущем шаге, согласно списка, должен быть удалён родительский каталог .\Data\3d\Configs\Particles\31_lumber_lm_night. Как Вы это поясните?
passstrada
20-10-2019, 23:05
С относительными путями (кстати, почему разделитель путей в формате POSIX?). Осталось понять, относительно чего? »
Пути относительные из-за того что каталог может находится у каждого пользователя по разному.
У кого-то на C:\papka\Data у кого-то C:\papka\papka\papka\Data или D:\papka1\papka2\papka3\Data.
159222
Вам, вероятно, понадобится искать в том каталоге, куда Вы поместите пакетный файл, так? »
Да
Судя по примеру »
1. Да
2. При обновлении каталога. На самом деле это добавилось, мне нужно сделать обратное, удалить то что обновилось.
Сейчас расскажу так что бы было понятней.
Есть допустим программа/игра (portable), при ее обновлении у меня есть список (изменённых файлов, новых файлов и тех файлов которые были удалены). Именно последний список меня и интересует.
Но когда программа/игра не может обновится (нет интернета там и тд. тп.) можно создать свой Update так сказать. Из новых файлов, измененных и в первую очередь - удалением старых в виде списка.
У меня есть относительные пути - но я не пойму как сделать этот uninstall.
Может мне и даже .bat не нужен для удаления по списку. Но я просто подумал что это лучший вариант для его создания и работы со списком.
passstrada, тогда непонятно, зачем удалять каталоги?
megaloman
22-10-2019, 12:09
passstrada,
Вам, вероятно, понадобится искать в том каталоге, куда Вы поместите пакетный файл »Может мне и даже .bat не нужен для удаления по списку. »
Сделал тупо, как поставлена задача, не вникая глубоко в смысл
кстати, почему разделитель путей в формате POSIX »-пришлось силой заменить / на \
удаление файлов и папок по списку txt или log »@Echo Off
Call :Reestr "Spis1====="
Exit /B 0
:Reestr
FOR /F "usebackq tokens=1* delims=:" %%a IN (`2^>nul FINDSTR /I /L /B /N %1 "%~dpnx0"`) DO (
FOR /F "usebackq delims=" %%s IN (`2^>nul More +%%a "%~dpnx0"`) DO (
Echo %%s |Find /I /N %1 >nul 2>&1 &&Exit /B 0
Call Set "PS=%%~s"
If Exist "%%~s\" >nul 2>&1 Call Rd "%%PS:/=\%%" /Q /S
If Exist "%%~s" >nul 2>&1 Call Del "%%PS:/=\%%"
)
)
Exit /B
Spis1=====
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_ground_l_1_dust.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_ground_l_2_dust2.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_ground_m_1_dust.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_ground_m_2_dust2.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_ground_s_1_dust.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_ground_s_2_dust2.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_stone_l_1_dust.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_stone_l_2_dust2.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_stone_m_1_dust.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_stone_m_2_dust2.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_stone_s_1_dust.yaml.dvpl
Data/3d/Configs/Particles/22_italy_it/chassis_effects/wave_stone_s_2_dust2.yaml.dvpl
Data/3d/Configs/Particles/31_lumber_lm_night
Data/3d/Configs/Particles/31_lumber_lm_night/chassis_effects
Spis1=====
-пришлось силой заменить / на \ »
Необязательно. Пока окончательно POSIX не выпилят, вроде как должно работать и так, и так.
megaloman
22-10-2019, 17:20
Iska, вроде как должно работать и так, и так. »
Rd работает, а del нет.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.