Что нового

Папка-шлюз

NOne

Новичок
Сообщения
9
Репутация
0
Приветствую.

Прошу помощи в такой задаче:

Есть папка "А".
В этой папке есть другие папки "АВ".

Нужно чтобы при запуске скрипта в папке "А" удалялись все файлы (но не папки), а в папках "АВ" удалялось все.

Без гуи ибо скрипт будет закинут в планировщик.

Заранее спасибо.
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Код:
#include <File.au3>
FileDelete("D:\folder A\*.*") ;удаляем все файлы из folder A
$folders_list=_FileListToArray("D:\folder A", "*", 2) ;получаем список папок, вложенных в folder A
For $i=1 To UBound($folders_list)-1
	DirRemove("D:\folder A\" & $folders_list[$i], 1) ;удаляем папки и все внутри них
	DirCreate("D:\folder A\" & $folders_list[$i]) ;создаем пустые папки снова
Next
 
Автор
N

NOne

Новичок
Сообщения
9
Репутация
0
Спасибо. Работает.

Если можно еще пара моментов.

1. Нужны исключения. Глобальные.

Типа так:
Код:
Global $Dir = "D:\folder A\" ;целевая папка
Global $exceptionsDir = "папка" ;не удаляем её из первого уровня
Global $exceptionsFile = "файл" ;не удаляем его из корня


2. По окончании работы пусть пишет log что удалил. Просто один txt-файлик который молча перезаписывается каждый раз после работы скрипта.
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Про папку первого уровня не понял, папки же и так остаются.

Код:
#include <File.au3>

Global $Dir = "D:\folder A\" ;целевая папка
Global $exceptionsFile = "D:\folder A\Новый текстовый документ.txt" ;не удаляем его из корня

FileDelete($Dir & "deleted_log.txt")

$files_list=_FileListToArrayRec($Dir, "*", 1, 1, 0, 2) ;получаем рекурсивно список всех файлов во всех папках
For $i=1 To UBound($files_list)-1
	If $files_list[$i] <> $exceptionsFile Then ;если это не файл исключения
		FileDelete($files_list[$i]) ;то удаляем этот файл
		FileWriteLine($Dir & "deleted_log.txt", $files_list[$i]) ;пишем в лог
	EndIf
Next

$folders_list=_FileListToArray($Dir, "*", 2) ;получаем список папок, вложенных в folder A
For $i=1 To UBound($folders_list)-1
	DirRemove($Dir & $folders_list[$i], 1) ;удаляем папки и все внутри них
	DirCreate($Dir & $folders_list[$i]) ;создаем пустые папки снова
Next
 
Автор
N

NOne

Новичок
Сообщения
9
Репутация
0
ексепшен у меня удаляется
2018-10-19-12_47_31-D__Program-Files__au3_temp.au3---SciTE-Lite.md.png


сори, не правильно выразился

Global $exceptionsDir = "папка" ;не удаляем её СОДЕРЖИМОЕ из первого уровня
 

hedji

Продвинутый
Сообщения
409
Репутация
94
NOne сказал(а):
ексепшен у меня удаляется

Должен быть указан полный путь к файлу, как в коде.
Код:
Global $exceptionsFile = "D:\folder A\Новый текстовый документ.txt"


NOne сказал(а):
не удаляем её СОДЕРЖИМОЕ из первого уровня

D:\folder A\FolderAB
D:\folder A\FolderAB\FolderC
D:\folder A\FolderAB\123.txt
D:\folder A\FolderAB\FolderC\234.txt
D:\folder A\FolderAB\FolderC\folderD
D:\folder A\FolderAB\FolderC\folderD\567.txt

Что из перечисленного должно остаться, а что удалиться?
 
Автор
N

NOne

Новичок
Сообщения
9
Репутация
0
hedji сказал(а):
Должен быть указан полный путь к файлу, как в коде.

а понял, типа
Код:
Global $exceptionsFile = $Dir & "ПРОЧТИ МЕНЯ.txt" ;не удаляем его из корня



hedji сказал(а):
D:\folder A\FolderAB
D:\folder A\FolderAB\FolderC
D:\folder A\FolderAB\123.txt
D:\folder A\FolderAB\FolderC\234.txt
D:\folder A\FolderAB\FolderC\folderD
D:\folder A\FolderAB\FolderC\folderD\567.txt

Что из перечисленного должно остаться, а что удалиться?

FolderAB

они ж разными названиями, поэтому типа "FolderAB5"


Кстати, можно сделать чтобы расположение log тоже указывалось вначале? Ибо юзерам оно не к чему, а только админу почитать
 

hedji

Продвинутый
Сообщения
409
Репутация
94
D:\folder A\FolderAB должен остаться со всем содержимым?
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Код:
#include <File.au3>

Global $Dir = "D:\folder A\" ;целевая папка
Global $exceptionsDir = $Dir & "folder AB"
Global $exceptionsFile = $Dir & "Новый текстовый документ.txt" ;не удаляем его из корня

FileDelete($Dir & "deleted_log.txt")

$files_list=_FileListToArrayRec($Dir, "*", 1, 1, 0, 2) ;получаем рекурсивно список всех файлов во всех папках
For $i=1 To UBound($files_list)-1
	If $files_list[$i] <> $exceptionsFile and Not(StringInStr($files_list[$i], $exceptionsDir)) Then ;если это не файл исключения и не в папке исключения
		FileDelete($files_list[$i]) ;то удаляем этот файл
		FileWriteLine($Dir & "deleted_log.txt", $files_list[$i]) ;пишем в лог
	EndIf
Next

$folders_list=_FileListToArray($Dir, "*", 2) ;получаем список папок, вложенных в folder A
For $i=1 To UBound($folders_list)-1
	If ($Dir & $folders_list[$i]) <> $exceptionsDir Then
		DirRemove($Dir & $folders_list[$i], 1) ;удаляем папки и все внутри них
		DirCreate($Dir & $folders_list[$i]) ;создаем пустые папки снова
		FileWriteLine($Dir & "deleted_log.txt", $Dir & $folders_list[$i])
	EndIf
Next
 
Верх