@MrHorns

Как написать BAT/CMD скрипт на очистку temp файлов в определенных директориях, при этом внутри темп оставить еще 3 нужные папки?

Нужен скрипт bat или cmd, который позволит производить одновременную чистку temp файлов сразу в нескольких указанных директориях и при этом оставить еще 3 - 4 ( больше одной папки) определенные папки (по названию), которые удалять не нужно. пробовал писать скрипт, либо удаляет всё, либо не производит операцию с несколькими директориями. Не знаю в чем ошибка. Есть ли варианты, как это можно сделать? Спасибо.
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
@MaxKozlov
Для powershell типа того
$no_remove = 'dir1', 'dir2', 'dir3'
$path = 'c:\temp'
Get-ChildItem $path | Where-Object { $_.Name -notin $no_remove } | Remove-Item -Force -Recurse -WhatIf

Это удалит всё по пути $path, кроме объектов, названия которых указаны в списке $no_remove
Если надо убедиться что это обязаны быть папки, можно изменить условие на
$_.Name -notin $no_remove -and 'Directory' -in $_.Attributes


Когда натренируетесь, -WhatIf убрать
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@azarij
В меру опытный никто
стало любопытно - скормил этот вопрос ChatGPT:

Версия бат/цмд:

Нужен скрипт bat или cmd, который позволит производить одновременную чистку temp файлов сразу в нескольких указанных директориях и при этом оставить еще 3 - 4 ( больше одной папки) определенные папки (по названию), которые удалять не нужно.

Вы можете создать скрипт .bat или .cmd, который будет удалять файлы из указанных директорий, но не удалять файлы из указанных исключенных папок. Для этого вы можете использовать команду for и утилиту del в Windows.

Пример скрипта:

@echo off

rem Указываем директории, в которых нужно удалять файлы
set directories=C:\Temp1 C:\Temp2 C:\Temp3

rem Указываем исключенные папки
set excluded_folders=Excluded1 Excluded2

rem Цикл по всем указанным директориям
for %%d in (%directories%) do (
  rem Цикл по всем файлам в директории
  for /f "delims=" %%f in ('dir /b /s "%%d\*"') do (
    rem Проверяем, что файл не находится в исключенной папке
    set skip=0
    for %%e in (%excluded_folders%) do (
      if /i "%%f"=="%%d\%%e" (
        set skip=1
      )
    )
    if %skip%==0 (
      del "%%f"
    )
  )
)

echo Done!


Версия powershell:

Нужен скрипт powershell, который позволит производить одновременную чистку temp файлов сразу в нескольких указанных директориях и при этом оставить еще 3 - 4 ( больше одной папки) определенные папки (по названию), которые удалять не нужно.

Вы можете создать скрипт PowerShell, который будет удалять файлы из указанных директорий, но не удалять файлы из указанных исключенных папок. Для этого вы можете использовать команду Get-ChildItem и функцию Remove-Item в PowerShell.

Пример скрипта:

# Указываем директории, в которых нужно удалять файлы
$directories = "C:\Temp1", "C:\Temp2", "C:\Temp3"

# Указываем исключенные папки
$excludedFolders = "Excluded1", "Excluded2"

# Цикл по всем указанным директориям
foreach ($directory in $directories) {
  # Получаем список файлов в директории
  $files = Get-ChildItem -Path $directory -Recurse -Force -ErrorAction SilentlyContinue

  # Цикл по всем файлам
  foreach ($file in $files) {
    # Проверяем, что файл не находится в исключенной папке
    if ($excludedFolders -notcontains $file.Directory.Name) {
      # Удаляем файл
      Remove-Item -Path $file.FullName -Force -ErrorAction SilentlyContinue
    }
  }
}

Write-Output "Done!"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы