Найти тему

Заклинание на вызов дождя

Оглавление

Часто встречаю в некоторых "батниках" вот такую "сакральную вещь":

for /d %%i in (tmp\tmp*,tmp\pip*) do rd /s /q "%%i" 2>nul || ("%%i" && exit /b 1) & del /q tmp\tmp* > nul 2>&1 & rd /s /q pip\cache 2>nul


Давайте разберемся, что "это" значит. И так, по порядку:

for /d %%i in (tmp\tmp*,tmp\pip*) do

- цикл перебора всех папок в папках "tmp\tmp*" и "tmp\pip*"

do rd /s /q "%%i" 2>nul || ("%%i" && exit /b 1)

- удаляет текущую папку в цикле перебора, или выводит сообщение об ошибке

& del /q tmp\tmp* > nul 2>&1

- удаляет все файлы в папке "tmp"

& rd /s /q pip\cache 2>nul

- удаляет папку "pip\cache"

В общем, это (вроде) удаляет все файлы и папки в папках "tmp\tmp*" и "tmp\pip*".

Теперь у меня несколько вопросов к "автору" этого кода:


1. Зачем мне перебирать все папки и файлы внутри папки
"tmp", и удалять отдельно каждый найденный внутри файл и папку, если я могу просто грохнуть папку "tmp", а уж коли она так нужна, то просто сразу по удалению ее создать опять?


Или вы подозреваете, что при удалении корневой папки, сами файлы, в ней находящиеся, не удаляются??? Смысл перебора какой??? )

Вот замена этому удалению с перебором":

rd /s /q "tmp"
md "tmp"


2. Там, где запускается этот "батник", разве есть в наличии папки "tmp" и "tmp\pip"?

Насколько мне известно, временная папка находится в "%temp%", а не в "temp", в "%tmp%", а не в "tmp".

Куда делись символы % ???

Попробуйте сами выполнить команды:

dir tmp
dir %tmp%
dir %temp%
dir temp

... и увидите разницу.

Насколько мне известно, папка кэша "pip" находится в:

"Users\User_Name\AppData\Local\pip\cache"

...и до нее добраться можно по системной переменной

"%LOCALAPPDATA%\pip\cache"

Каким "волшебным способом" папка "pip\cache" удалится без указания полного пути к ней???

Проверьте сами, выполните команды:

dir pip\cache
dir %LOCALAPPDATA%\pip\cache

... и увидите разницу.

Так что, указанный "кусок кода" - на самом деле является типичным примером
АБСОЛЮТНО БЕЗГРАМОТНОГО КОДА, в котором тот, кто его писал, просто не знаком с системой!

Не "подставлены" абсолютные пути к папкам, поэтому эти папки будут искаться "в текущем каталоге", а не там где рассчитывал автор. Вместо подстановки "системных переменных" поставлены "относительные пути", поэтому непонятно куда они ведут...

ЭТОТ КОД НЕ РАБОТАЕТ ВООБЩЕ!!!

Этот код абсолютно бесполезен, и может использоваться только в качестве "Заклинания на вызов дождя".

Удачи!
NStor
https://t.me/stable_cascade_rus
https://t.me/sriger