Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Очистка папки
 
Вообщем на компе есть папка "Y" в которую скидывают документы, папки и прочую муть.
Требуется создать задачу чтобы эта папка очищалась каждый день в 00:00, т.е. удалялись все внутренние папки, и файлы. Но сама папка "Y" при этом не удалялась (там права на доступ к папке очень сложные, замучаюсь каждый раз переделывать). Было принято решение написать батник, с содержимым:
del /f /s /q C:\Users\Work\Desktop\y\*.*

и тут возникла проблемка, команда del удаляет файлы, а папки оставляет, есть команда rd, но данной командой можно удалить всю ветку.
Подскажите как решить сею проблемму?
 
Тут я бы иначе поступил:

средствами UNIX (используя Msys или CygWin? причём Msys предпочтительнее т.к. для неё требуется меньше зависимостей):

cd C:\Users\Work\Desktop\y&&rm -fR *

средствами самой ОС:

cd C:\Users\Work\Desktop\y&&rd /s /q *

только имейте ввиду, что конвейер команд организованный знаками "&" и "&&" имеет две особенности:

1) он работает либо в среде командных процессоров UNIX (bash/sh и их клонов) или в среде командного процессора WINNT CMD либо в среде командного процессора JP Software Take Command / Take Command/LE (TCMD / TCMD/LE).

2) интерпретация символов в конвейере различается по условию выполнения следующей команды:

  & - выполнить следующую команду если предыдущая команда завершилась, результат исполнения не проверяется. Т.е. может быть как успешным, так и неудачным.

  && - выполнить следующую команду только если предыдущая команда выполнена успешно.
Изменено: VictorVG - 27.02.2013 22:30:36 (дополнил описание конвейера команд)
 
вариант 3
средствами винды

Код
SUBST Z:\ C:\Users\Work\Desktop\y\ 

Код
rd Z:\

Код
SUBST Z:\ /D

т.е. мантируем эту папку как диск
чистим диск
отмантируем папку
 
[mad]Mega

В принципе можно конечно и смонтировать каталог, но это может вызвать сбой в других приложениях динамически обновляющих дерево файловой системы, особенно в сетевых. Причина простая - приложение обнаружило новую точку монтирования, попыталось построить для неё подветвь дерева и в этот момент точка монтирования удаляется. Если построенная часть дерева приложением каким-то способом используется, то это может вызвать сбой. Для его предотвращения использование способов 1) и 2) предпочтительнее т.к. происходит простая операция удаления ветви уже существующего дерева без появления новой точки монтирования и нового логического тома в сети. Такая операция сбоя не вызовет, а внезапное появление-исчезновение сетевого тома может всю сеть на уши поставить. Поэтому я способ 3) специально в своих рекомендациях сразу исключил - принцип "Не навреди!".
 
хм... я просто не сталкивался с тем софтом который "динамически обновляющих дерево файловой системы", а данном случаи новой точки монтирования
скинь плз, линк на почитать, буду изучать
 
Ребят небольшая корректировка ОС: Win serм 2008 r2.

При попытке выполнить:
cd C:\Users\Work\Desktop\y&&rd /s /q *
Выдает:
Синтаксическая ошибка в имени файла, имени папки или метке тома.
 
Виктор Иванов

Ага, возможно старый глюк винконсоли вылез. Попробуйте так отдать команду:

cd "C:\Users\Work\Desktop\y"&&rd /s /q ./*.*

[mad]Mega

к примеру Far Manager - http://www.farmanager.com/ отключаем в настройках автообновление файловых панелей, создаём новую точку монтирования, перечитываем дерево, удаляем точку монтирования, вводим команду и наслаждаемся зрелищем. :)
 
Недопустимый ключ: "*.*"

(((
 
эм... если я правильно понял, то дерево читается с открытых файловых панелей, т.е. как минимум нам нужно ручками перейти на диск Z и тут тогда меня смущает слово "динамически"
2Виктор:
rd /s /q "./*.*"
или
rd /s /q "./"
Изменено: [mad]Mega - 28.02.2013 16:39:06
 
Ура, всем спасибо за помощь, вообщем батник вышел такой:
del /f /s /q C:\Users\Work\Desktop\y\*.*
cd "C:\Users\Work\Desktop\y"&&rd /s /q "./."
 
[mad]Mega

Что мы собственно и воспроизведём в опыте отключив в настройках Far к примеру обновление сетевых дисков - дерево ФС он держит в своём кэше в ОЗУ, создали точку монтирования, обновили кэш командой Ctrl+R, удалили точку монтирования и к примеру следом  выдали cd <removed_mountpoint>\subdir\ или что ещё веселее выдать что-то типа mountvol  <removed_mountpoint>\subdir\  <vol> /n . Эффект будет - сногсшибательный. Хватай мешки, вокзал отходит!  :)  

Виктор Иванов

Там можно было и такой вариант попробовать - cd "C:\Users\Work\Desktop\y"&&rd /s /q ./* , но в данном случае это очередные модификации консоли в Win7 вылезли - ребята в Редмонде явно хотят максимально привести свою консоль к спецификациям команд UNIX, но у них как всегда это выходит хоть святых выноси - ну не умеют эти двоечники думать.  :)
Изменено: VictorVG - 01.03.2013 03:55:36
 
Вообщем на Win7 все работает, а на Win serv 2008 r2, при выполнении такой строчки:
cd "D:\Work\OBSHEE\y"&&rd /s /q "./."

Папка OBSHEE не очищается, а удаляются батники с рабочего стола )))
И еще вопрос, пришлось переименовать папку из ОБЩЕЕ в OBSHEE, так как при выполнении команды:
del /f /s /q D:\Work\ОБЩЕЕ\ *.*
пишет что файл не найден  :(   D:\Work\ (А в этом месте всякие кракозябры)\
 
лишний пробел? отсутствие ковычек "" (я говорю про "del /f /s /q D:\Work\ОБЩЕЕ\ *.* ")
импровизируйте :) (я советую использовать команду не del, а скажем "echo 1 > 1.txt" )
 
Виктор Иванов

Предположу, что у Вас неправильные настройки локали в консоли вылезли. В таком случае никакие кавычки не спасут. По умолчанию локаль консоли СЗ437/866, а GUI CP-1251/65001/1201 (Windows-1251/UTF-8/UTF-16 LE), NTFS может хранить имена в любой кодировке, но команда воспринимает их так, как консоль передала ей из stdin. И если кодировка не совпала, то ошибка "Файл не найден" вполне ожидаемое явление - ну нет того файла имя которого пришло в stdin в неверной кодировке - hex значения длинного имени будет иным, и короткое имя так же будет различаться. А раз имена разные, то и объекты разные.

Ограничения на допустимые имена и наборы символов для имён файлов на FAT, HPFS, NTFS смотрите в статье базы знаний Микрософт KB100108 .

и ещё один момент - консоль не всегда сразу отрабатывает команду chwd (cd). Заметил на вызовах Windows Platform SDK v7. Пришлось добавлять в вызов дополнительную команду cd <driveletter>: . Попробуйте так:

cd D:\Work\OBSHEE\y\&&cd D:

если это проявляется ошибка перехода, то после выполнения команды вы окажетесь в каталоге D:\Work\OBSHEE\y\ и тогда должна правильно отработать команда:

cd D:\Work\OBSHEE\y\&&cd D:&&rd /s /q "./."

что получится отпишитесь, особенно если консоль выдаст ошибки. Будем проверять.
Изменено: VictorVG - 05.03.2013 23:17:04 (неверная гиперссылка из буфера попала. исправлено.)
 
Виктор Иванов

Чтобы перейти на другой диск командой CD используйте правильный синтаксис CD [/D] [диск:][путь] - синтаксис из справки команды.  ;)  
В 2008 R2 для очистки папки может быть удобнее использовать не cmd, а powershell, например
dir "путь к папке" -Recurse -Force | % {Remove-Item $_.fullname -Recurse -Force}
или del "путь к папке\*" -Recurse -Force
Изменено: bloq - 06.04.2013 22:23:54
Страницы: 1
Читают тему