Часто встречаю в некоторых "батниках" вот такую "сакральную вещь":
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