Как удалить папку через bat
Перейти к содержимому

Как удалить папку через bat

  • автор:

Удаление папки, содержащей исполняемый bat-файл из этого же файла

Он удаляет все содержимое папки, в которой исполняется, но не саму папку. Вываливается ошибка, что файл занят (что логично, потому что там исполняется мой файл). Как удалить саму папку, содержащую исполняемый файл?

Отслеживать
задан 6 июл 2020 в 16:26
alexbayker alexbayker
187 10 10 бронзовых знаков

а у меня работает Ваш пример без проблем. Видимо, Вы вызываете батник, находясь в каталоге, где он расположен. Попробуйте вызывать его из другого рабочего каталога, указав полный путь, типа: C:\>c:\directory\delete.bat

9 июл 2020 в 8:48

0

Сортировка: Сброс на вариант по умолчанию

Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.

    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.3.1.5619

Записки IT специалиста — Форум

Вернуться в блог

02 марта 2024, 00:07

Цитата дня:

Праздник нужно всегда носить с собой. Эрнест Хемингуэй

  • Записки IT специалиста — Форум
  • ► Клиентские операционные системы
  • ► Windows 7/8
  • ► bat-файл для очистки временных файлов и ПАПОК

bat-файл для очистки временных файлов и ПАПОК

Автор STALKER_SLX, 25 декабря 2018, 12:03

0 Пользователей и 1 Гость просматривают эту тему.

CMD/BAT:Выборочное удаление ненужных папок

Он удаляет все файлы из всех под папок но сами папки не трогает.
Вопрос заключается в следующем, можно ли доработать этот код так что бы он удалял только определённые папки.
Например у меня на работе есть папка Scan туда отправляются все отсканированные файлы с МФУ которая стоит у меня в кабинете в этой папке есть ещё 2 папки Buh(это для бухгалтерской МФУ) и Bib(это для МФУ которая стоит в библиотеке). Но бухгалтера любят в папке Scan создавать ещё кучу папок и отдельно перекидывать туда свои сканы и именно вот эти папки мне надо удалять а папки Buh и Bib не трогать.
Помогите кто чем сможет пожалуйста)

2 Ответ от alexii 2019-05-06 13:19:59

Re: CMD/BAT:Выборочное удаление ненужных папок

То есть, у Вас есть наличествует, например, такая вот структура каталогов:

C:\SCAN ├───aaaaa ├───Bib ├───Buh ├───sdhsdfhdfh ├───sgdfgdh └───sksgksgkl

И Вам надо удалить все каталоги, отличные от Bib и Buh, так?

@echo off setlocal enableextensions enabledelayedexpansion set sSourceFolder=C:\Scan set sExcludeFolders="Bib" "Buh" if exist "%sSourceFolder%\." ( pushd "%sSourceFolder%" && ( for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:d "%sSourceFolder%\*.*"`) do ( set bFound= for %%j in (%sExcludeFolders%) do ( if /i "%%~i" equ "%%~j" set bFound=1 ) if not defined bFound echo rd /s /q "%sSourceFolder%\%%~i" ) popd ) ) else ( echo Can't find source folder [%sSourceFolder%]. exit /b 1 ) endlocal exit /b 0 

Для реального удаления уберите echo перед командой rd.

3 Ответ от Konstantin 2019-05-08 02:27:09

Re: CMD/BAT:Выборочное удаление ненужных папок

Спасибо, а можно как ни будь сделать что бы эти папки он не трогал а содержимое в них удалял, то есть папка Bib оставалась а содержимое её чистилось и желательно что бы чистились файлы старше определённого числа например старше 3 дней если не сложно подскажите пожалуйста.) alexii

4 Ответ от alexii 2019-05-08 03:44:13

Re: CMD/BAT:Выборочное удаление ненужных папок

Konstantin пишет:

а содержимое её чистилось и желательно что бы чистились файлы старше определённого числа

А каталоги? И какую берём дату — дату создания или дату последней модификации?

5 Ответ от Konstantin 2019-05-08 04:19:38

Re: CMD/BAT:Выборочное удаление ненужных папок

alexii Каталог тот же, дата последней модификации.

6 Ответ от alexii 2019-05-08 04:37:32

Re: CMD/BAT:Выборочное удаление ненужных папок

Konstantin, я спрашивал, что делать со вложенными каталогами, которые встретятся внутри?

7 Ответ от Konstantin 2019-05-13 00:45:04 (изменено: Konstantin, 2019-05-13 00:45:26)

Re: CMD/BAT:Выборочное удаление ненужных папок

alexii, Нужно что бы папка папка Scan чистилась полностью так же как и папки Bib и Buh но сами папки Bib и Buh оставались, ах да так же появилась папка Obmen которую не нужно чистить.

8 Ответ от Konstantin 2019-05-17 00:47:32

Re: CMD/BAT:Выборочное удаление ненужных папок

alexii ну так что поможете?

9 Ответ от alexii 2019-05-19 13:21:18 (изменено: alexii, 2019-05-19 13:21:31)

Re: CMD/BAT:Выборочное удаление ненужных папок

Konstantin. пробуйте (на WSH):

+ открыть спойлер

Option Explicit Dim strSourceFolder Dim arrExcludeFolders Dim lngDiff Dim objFSO Dim objExcludeFolders Dim strExcludeFolder strSourceFolder = "C:\Scan" arrExcludeFolders = Array("Bib", "Buh", "Obmen") lngDiff = 3 * 24 * 60 * 60 ' Days count * Hours in day * Minutes in hour * Seconds in minute Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(strSourceFolder) Then Set objExcludeFolders = WScript.CreateObject("Scripting.Dictionary") For Each strExcludeFolder In arrExcludeFolders objExcludeFolders.Add objFSO.BuildPath(strSourceFolder, strExcludeFolder), strExcludeFolder Next ScanSubFolders objFSO.GetFolder(strSourceFolder), 0 objExcludeFolders.RemoveAll Set objExcludeFolders = Nothing Else WScript.Echo "Can't find source folder [" & strSourceFolder & "]." WScript.Quit 1 End If Set objFSO = Nothing WScript.Quit 0 '============================================================================= '============================================================================= Sub ScanSubFolders(objFolder, intLevel) Dim objSubfolder Dim objFile Dim strExcludeFolder WScript.Echo String(intLevel, vbTab) & "Scan folder [" & objFolder.Path & "]" For Each objSubfolder In objFolder.SubFolders ScanSubFolders objSubfolder, intLevel + 1 Next For Each objFile In objFolder.Files If DateDiff("s", objFile.DateLastModified, Now()) >= lngDiff Then WScript.Echo String(intLevel, vbTab) & "File [" & objFile.Path & "] deleted." objFile.Delete True Else WScript.Echo String(intLevel, vbTab) & "File [" & objFile.Path & "] skipping." End If Next If objFolder.SubFolders.Count = 0 And objFolder.Files.Count = 0 Then If Not objExcludeFolders.Exists(objFolder.Path) Then WScript.Echo String(intLevel, vbTab) & "Folder [" & objFolder.Path & "] deleted." objFolder.Delete True Else WScript.Echo String(intLevel, vbTab) & "Folder [" & objFolder.Path & "] excluded." End If Else WScript.Echo String(intLevel, vbTab) & "Folder [" & objFolder.Path & "] not empty, skipping." End If End Sub '============================================================================= 

10 Ответ от Konstantin 2019-05-19 13:36:31

Re: CMD/BAT:Выборочное удаление ненужных папок

alexii спасибо попробую

Сообщения 10

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Команда RMDIR (RD) – удалить каталог файловой системы Windows.

Команда RMDIR имеет синоним RD и предназначена для удаления каталогов файловой системы Windows.

Формат командной строки:

RMDIR [/S] [/Q] [диск:]путь

RD [/S] [/Q] [диск:]путь

Параметры командной строки:

/S — Удаление дерева каталогов, т. е. не только указанного каталога, но и всех содержащихся в нем файлов и подкаталогов.

/Q — Отключение запроса подтверждения при удалении дерева каталогов с помощью ключа /S .

Примеры использования команды RD ( RMDIR )

Команда RD не поддерживает шаблоны имен файлов и подкаталогов. Так, например, попытка выполнения команды RD C:\Users\*.* , завершится сообщением об ошибке в имени каталога. Однако, в качестве параметров можно задавать несколько путей каталогов:

RD C:\Mydocs C:\Myprogs — выполнить удаление содержимого папок C:\Mydocs и C:\Myprogs.

RD C:\docs — выполнить удаление папки C:\docs. Если параметр /S не задан, то удаляемая папка C:\docs должна быть пустой.

RD /S /Q C:\Docs — удаление папки C:\Docs и всех ее подпапок без запроса на подтверждение.

Особенность реализации команды RD с параметром /S заключается в том, что будут удалены не только подкаталоги, но и сам каталог C:\Docs, даже если в нем существовали файлы, а не подпапки. Поэтому, для удаления только содержимого каталога ( когда требуется сделать каталог пустым, а не удалить его совсем), можно воспользоваться следующим приемом – сделать удаляемый каталог текущим и выполнить команду RD по отношению к его содержимому:

RD /s/q «My Folder»

Имя каталога, содержащее пробелы заключается в двойные кавычки. Поскольку команда CD сделала удаляемый каталог текущим, то его удаление не выполнится , а ключ /S приведет к удалению всех подкаталогов и файлов каталога «My Folder»

Ниже приведенный командный файл удаляет пустые папки в каталоге временных файлов, определяемом значением переменной окружения TEMP . Список удаленных папок записывается в файл с именем c:\tempfoldersempty.txt

RMDIR /Q %%~i && echo %%~i >> c:\tempfoldersempty.txt

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *