Как удалить подпапки и файлы из родительских папок, найденных в переменной скрипта bat? - PullRequest
1 голос
/ 29 марта 2020

Я пытаюсь найти все папки с именем «temp» на локальном диске C, а затем удалить все файлы и подпапки, которые находятся внутри него, но я не знаю, как его удалить, я только удалось добраться до части поиска всех папок и поместить их в переменную, но я не знаю правильный код для удаления. Справка.

@echo off
setlocal
setlocal enabledelayedexpansion
@echo off
for /d /r "c:\" %%i in (temp) do (
@if exist "%%i" (
@set _variable=%%i
@echo !_variable!
)
)
endlocal

1 Ответ

2 голосов
/ 29 марта 2020
@echo off && setlocal enabledelayedexpansion

cd /d "C:\" && for /f tokens^=* %%i in ('dir /s /b /a:d "temp"')do (
   echo\ Current Folder: "%%~i"
   echo\ RmDir /q /s "%%~i"
   echo\ MkDir "%%~i"
  )

%__APPDIR__%\Timeout.exe /t -1 & endlocal & goto :EOF

1) Go на привод:

cd /d "C:\"

2) Использование For /f с dir /s /b /a:d вместо For /D /R

 for /f tokens^=* %%i in ('dir /s /b /a:d "temp"')do... 

3) Не нужно удалять файлы в целевой папке, просто удалите и снова создайте эту папку ...

RmDir /q /s "%%~i" && MkDir "%%~i\*"

  • Выходы выглядят так:
Current Folder: "C:\Program Files (x86)\Google\Temp"
rmdir /q /s "C:\Program Files (x86)\Google\Temp"
mkdir "C:\Program Files (x86)\Google\Temp\"
Current Folder: "C:\Program Files (x86)\Steam\steamapps\temp"
rmdir /q /s "C:\Program Files (x86)\Steam\steamapps\temp"
mkdir "C:\Program Files (x86)\Steam\steamapps\temp\"
Current Folder: "C:\ProgramData\Microsoft\Windows\WER\Temp"
rmdir /q /s "C:\ProgramData\Microsoft\Windows\WER\Temp"
mkdir "C:\ProgramData\Microsoft\Windows\WER\Temp\"
Current Folder: "C:\Users\All Users\Microsoft\Windows\WER\Temp"
rmdir /q /s "C:\Users\All Users\Microsoft\Windows\WER\Temp"
mkdir "C:\Users\All Users\Microsoft\Windows\WER\Temp\"
Current Folder: "C:\Users\Default\AppData\Local\Temp"
rmdir /q /s "C:\Users\Default\AppData\Local\Temp"
mkdir "C:\Users\Default\AppData\Local\Temp\"
Current Folder: "C:\Users\ecker\AppData\Local\Temp"
rmdir /q /s "C:\Users\ecker\AppData\Local\Temp"
mkdir "C:\Users\ecker\AppData\Local\Temp\"
Current Folder: "C:\Users\ecker\AppData\Local\Intel\CUIPromotions\Temp"
rmdir /q /s "C:\Users\ecker\AppData\Local\Intel\CUIPromotions\Temp"
mkdir "C:\Users\ecker\AppData\Local\Intel\CUIPromotions\Temp\"
Current Folder: "C:\Users\ecker\AppData\Local\Packages\windows_ie_ac_001\AC\Temp"
rmdir /q /s "C:\Users\ecker\AppData\Local\Packages\windows_ie_ac_001\AC\Temp"
mkdir "C:\Users\ecker\AppData\Local\Packages\windows_ie_ac_001\AC\Temp\"
Current Folder: "C:\Windows\Temp"
rmdir /q /s "C:\Windows\Temp"
mkdir "C:\Windows\Temp\"
Current Folder: "C:\Windows\assembly\temp"
rmdir /q /s "C:\Windows\assembly\temp"
mkdir "C:\Windows\assembly\temp\"
mkdir "C:\Windows\assembly\NativeImages_v4.0.30319_64\Temp\"
Current Folder: "C:\Windows\System32\DriverStore\Temp"
rmdir /q /s "C:\Windows\System32\DriverStore\Temp"
mkdir "C:\Windows\System32\DriverStore\Temp\"
Current Folder: "C:\Windows\WinSxS\Temp"
rmdir /q /s "C:\Windows\WinSxS\Temp"
mkdir "C:\Windows\WinSxS\Temp\"

  • Проверьте в своем проверьте выходы и для эффективного выполнения удалите echo in:
@echo off && setlocal enabledelayedexpansion

cd /d "C:\" && for /f tokens^=* %%i in ('dir /s /b /a:d "temp"')do (
   echo\ Current Folder: "%%~i"
   <strike><strong>echo\</strike></strong> RmDir /q /s "%%~i"
   <strike><strong>echo\</strike></strong> MkDir "%%~i"
  )

%__APPDIR__%\Timeout.exe /t -1 & endlocal & goto :EOF

  • Или используйте эту короткую опцию для подавления возможного сообщения об ошибке для любая используемая папка или какой-либо другой тип ошибки
@echo off 

setlocal enabledelayedexpansion && cd /d "C:\"
for /f "tokens=*" %%i in ('dir /s /b /a:d "temp"
')do 2>nul >nul (RmDir /q /s "%%~i" && MkDir "%%~i")
"%__APPDIR__%\Timout.exe" -1 & endlocal & goto :EOF
  • И, конечно, немного меньший вариант ...
@echo off 

cd/d "C:\" & setlocal enabledelayedexpansion
for /f tokens^=* %%i in ('dir/s/b/a:d "temp"
')do 2>nul (RmDir /q /s "%%~i" && MD "%%~i")
"%__APPDIR__%\Timeout.exe" /t -1 && endlocal

Для справки из командной строки вы можете использовать /?:

RmDir /?, For /?, MkDir /?, Endlocal /?, SetLocal /?

В inte rnet вы можете получить дополнительную помощь по:

...