Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Очищение папки TEMP

Ответить
Настройки темы
CMD/BAT - [решено] Очищение папки TEMP

Пользователь


Сообщения: 125
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток, дорогие форумчане. Знаю тема уже не новая, и скорее всего есть решение, но мне довольно сложно найти его, еси вы подскажите (ткнете носом) на уже готовое решение, буду признателен. А сейчас вопрос такой. Есть windows server 2008 куда по RDP подключаются порядка 100 человек, у нас на нем 1с сервер. У пользователя в профиле есть папочка TEMP (C:\Users\<пользователь>\AppData\Local\Temp) которую необходимо очищать при каждом его входе в систему. Знаю, что это делается через скрипт, я его написал (взял в интернете) но он не работает, а что-то менять, когда в этом не разбираешься, не очень хочется(опасно). Подскажите как правильно его написать?
Скрытый текст

pushd %TEMP% && rd /s /q . > nul 2>&1
pushd %WinDir%\TEMP && rd /s /q . > nul 2>&1


есть еще такой, но он совсем удаляет папку TEMP
Скрытый текст

:start
DEL /F /S /Q /A "%USERPROFILE%\AppData\Local\Temp\*"

cd %USERPROFILE%\AppData\Local\Temp\\AppData\Local\Temp
rmdir /s /q %USERPROFILE%\AppData\Local\Temp

Отправлено: 10:26, 27-02-2019

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
if exist "%sTempFolder%\." »
В некоторых случаях, это не очень хорошая идея, использовать точку для проверки существования каталога ...
Поясню картинкой:

Названия соответствуют существующим элементам, т.е. "file" - файл, "FOLDER" - каталог

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:36, 07-03-2019 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 125
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата mwz:
Их можно грохать все, но только после завершения загрузки »
ко времени запуска скрипта, загрузка ОС завершена и все обновления так же установлены.

Цитата mwz:
Причём даже на этом этапе некоторые файлы из этой папки могут использоваться системой — и тогда она их удалить не даст »
да, данный скрипт, что написал я в последнем своем сообщение, не полностью очищает папку, скорее всего какие то файлы используются в данный момент.

Цитата Iska:
Ключевые, с моей точки зрения, места в коде выделил. »
в написании скриптов не силен (от слова совсем) буду изучать и разбирать команды cmd и ваш код, особенно выделенные места. Как я на данную минуту понял, если папка %sTempFolder%\ существует , то переходим в каталог и очищаем содержимое с ключами s и q, а если каталога нет то выход.

Отправлено: 09:02, 07-03-2019 | #22


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


YuS_2, антересно девки пляшуть, по четыре штуки в ряд. Хмм… Я был уверен, что именно наличие точки гарантирует, что это будет каталог. У Вас есть идеи — отчего так?!

Цитата neviDimka91:
то переходим в каталог и очищаем содержимое »
Переходим и, если удачно перешли, тогда пытаемся удалить этот каталог (что приводит к удалению всего его содержимого, кроме самого каталога, поскольку он является в этот момент текущим).

Отправлено: 14:50, 07-03-2019 | #23


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
У Вас есть идеи — отчего так?! »
Видимо, какой-то скрытый баг интерпретатора, потому как путь такой, на самом деле ведь не существует и при попытке перейти по нему, будет выдано сообщение об ошибке...

-------
scio me nihil scire. Ѫ


Отправлено: 22:00, 07-03-2019 | #24


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Iska:
Хмм… Я был уверен, что именно наличие точки гарантирует, что это будет каталог. У Вас есть идеи — отчего так?! »
да, несколько неожиданно, хотя в чём-то даже логично: точка - скорее оператор(?) контекста, чем относительный путь

Цитата YuS_2:
Видимо, какой-то скрытый баг интерпретатора, потому как путь такой, на самом деле ведь не существует и при попытке перейти по нему, будет выдано сообщение об ошибке... »
на файл тоже нельзя перейти, так что не аргумент


Цитата mwz:
даже на этом этапе некоторые файлы из этой папки могут использоваться системой — и тогда она их удалить не даст.»
логично предположить, что если если одни файлы уже используются системой, то некоторые соседние могут понадобиться чуть позже

Отправлено: 23:30, 07-03-2019 | #25


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Видимо, какой-то скрытый баг интерпретатора, потому как путь такой, на самом деле ведь не существует и при попытке перейти по нему, будет выдано сообщение об ошибке... »
Цитата Busla:
да, несколько неожиданно, хотя в чём-то даже логично: точка - скорее оператор(?) контекста, чем относительный путь »
Похоже, проблема несколько глубже, нежели чем просто в отдельно взятом интерпретаторе команд: то же самое наблюдается в WSH, PowerShell, .Net. Возможно, дело в функции WinAPI, но мне что-то лень ковырять .

Надо просто запомнить и больше не использовать данную логику в пакетных файлах (в остальных языках есть нормальное деление на File Exists/Folder Exists).
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:41, 08-03-2019 | #26


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Busla:
хотя в чём-то даже логично »
Не очень. Точка -оператор текущего каталога, но там его просто не существует, т.к. это файл.
Цитата Busla:
на файл тоже нельзя перейти, так что не аргумент »
Как раз, аргумент присутствия бага, вопрос только в том, где он закопался...
На файл условный оператор указывает правильно:
Код: Выделить весь код
if exist "d:\FOLDER\file\" (echo Yes) else (echo No)
No
- такого каталога не существует. И перейти соответственно нельзя.
А если без слэша, то файл будет найден, хоть и перейти нельзя - тут всё верно и условный оператор отрабатывает соответственно тому, о чем его попросили.
И кстати, вот это тоже верно, с точки зрения синтаксиса и логики тоже:
Код: Выделить весь код
if exist "d:\FOLDER\file\.." (echo Yes) else (echo No)
Yes
две точки - переход в родительский каталог. Он существует, значит условие выполнено.

А вот это вне логики:
Код: Выделить весь код
if exist "d:\FOLDER\file\." (echo Yes) else (echo No)
Yes
- никакого разумного объяснения, лично я, не нашел...

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:18, 08-03-2019 | #27


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
В некоторых случаях, это не очень хорошая идея, использовать точку для проверки существования каталога ... »
а так?
Код: Выделить весь код
@echo off
echo "%~a1"|>nul find "d" && echo Folder || echo File
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:57, 24-03-2019 | #28


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата alpap:
а так? »
Да, так нормально, но тут необходимо быть уверенным, что параметром будет действительное имя файла или каталога, потому, что прилететь может простой набор букв и такой код выдаст, что это имя файла...
В общем, понадобится двойная проверка, ещё и как минимум, на наличие дефиса "-", чтобы однозначно определить, что это существующий путь к файлу или каталогу.

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:06, 25-03-2019 | #29


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
понадобится двойная проверка »
ну для студентов разных может быть, а для того кто делом занимается, достаточно, так как уж он точно знает и понимает что задает параметром, тем более можно и так поступить:
Код: Выделить весь код
@echo off
for /f "delims=" %%a in ('dir /b "Имя или часть*"') do echo "%%~aa"|>nul find "d" && echo Folder || echo File
pause& exit
тут левый набор не прокатит, так как будет ошибка просто - файл не найден.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:27, 25-03-2019 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Очищение папки TEMP

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Ярлык из папки Temp za1 Microsoft Windows 7 2 20-11-2015 11:30
SSD - Пропадают файлы из папки TEMP! Ошибка: не найден файл Temp materiy_boec Накопители (SSD, HDD, USB Flash) 1 21-10-2014 16:24
VBA - Архивирование папки в папке %temp% Dark_Timur Программирование и базы данных 3 03-07-2012 13:42
CMD/BAT - Удаление фалов из папки TEMP twinzzz75 Скриптовые языки администрирования Windows 8 26-05-2012 13:44
Переполнение папки TEMP Guest Microsoft Windows 95/98/Me (архив) 12 04-09-2003 12:58




 
Переход