Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Очищение папки TEMP (http://forum.oszone.net/showthread.php?t=339444)

neviDimka91 27-02-2019 10:26 2860267

Очищение папки TEMP
 
Доброго времени суток, дорогие форумчане. Знаю тема уже не новая, и скорее всего есть решение, но мне довольно сложно найти его, еси вы подскажите (ткнете носом) на уже готовое решение, буду признателен. А сейчас вопрос такой. Есть 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

Busla 27-02-2019 10:42 2860271

Цитата:

Цитата neviDimka91
У пользователя в профиле есть папочка TEMP (C:\Users\<пользователь>\AppData\Local\Temp) которую необходимо очищать при каждом его входе в систему. »

не надо
содержимое TEMP в общем случае должно переживать перезагрузку

neviDimka91 27-02-2019 10:59 2860281

Цитата:

Цитата Busla
не надо
содержимое TEMP в общем случае должно переживать перезагрузку »

объясню, зачем такое нужно. Пользователи работая в 1с, за один день набивают содержимом эту папку от 5 до 10гб за день. Сервер перезагружается каждую ночь. Может тогда очищать папку вечером, когда все ушли или же утром, перед работой?

alpap 27-02-2019 15:23 2860347

Цитата:

Цитата neviDimka91
как правильно его написать? »

для очистки папки используется следующий код
Код:

@echo off
set "sdir=%TEMP%"

pushd "%sdir%"
 rd /s /q "%sdir%" 2>nul
popd

pause

а если папок не одна, то можно так
Код:

@echo off
set "sdir="%TEMP%" "%USERPROFILE%\AppData\Local\Temp""

for %%n in (%sdir%) do (
 pushd "%%~n"
  echo rd /s /q "%%~n" 2>nul
 popd
)

pause


neviDimka91 27-02-2019 15:42 2860352

HTML код:

@echo off
set "sdir=%TEMP%"

pushd "%sdir%"
 rd /s /q "%sdir%" 2>nul
popd

pause

на сервере не сработал папка не почистилась, на локальном компьютере сработал
HTML код:

@echo off
set "sdir="%TEMP%" "%USERPROFILE%\AppData\Local\Temp""

for %%n in (%sdir%) do (
 pushd "%%~n"
  echo rd /s /q "%%~n" 2>nul
 popd
)

pause

не работает

Iska 27-02-2019 19:04 2860407

Цитата:

Цитата neviDimka91
Пользователи работая в 1с, за один день набивают содержимом эту папку от 5 до 10гб за день. »

Чем?!

alpap 27-02-2019 22:50 2860474

Цитата:

Цитата neviDimka91
на сервере не сработал »

конкретный путь укажите - сработает

Цитата:

Цитата neviDimka91
не работает »

в этой строке
echo rd /s /q "%%~n" 2>nul
стоит предохранитель: echo, надо убрать для работы, вам же пользоваться, надо внимательно смотреть.

neviDimka91 28-02-2019 08:33 2860512

Цитата:

Цитата Iska
Чем?! »

я не силен в работе 1с, в папку ТЕМР залетают все документы и файлы, которые пользователь использовал во время работы программы.
Цитата:

Цитата alpap
конкретный путь укажите - сработает »

указал, сработало. Спасибо огромное.

но теперь возникает другой вопрос, говорят папку очищать при входе пользователя в компьютер "не правильно" как тогда быть? и почему это не правильно, разъясните пожалуйста, чем это чревато, спасибо.

alpap 28-02-2019 14:47 2860574

Цитата:

Цитата neviDimka91
очищать при входе пользователя в компьютер "не правильно" как тогда быть? и почему это не правильно, разъясните пожалуйста, чем это чревато »

полагаю вопрос к Busla или Iska, потому как в таких вопросах как раз я не силен.

Iska 05-03-2019 05:38 2861396

neviDimka91, каталог временных файлов может использоваться инсталляциями приложений для временного хранения тех файлов, которые не могут быть заменены непосредственно в момент иснталляции, потому как используются операционной системой или самим приложением, их замена выносится на момент загрузки или предзагрузки операционной системы. Потому удалять всё зараз может не быть хорошо. Поэтому, например, штатная утилита Disk Cleanup удаляет оттуда только те файлы, разница в дате-времени последней модификации которых с текущей датой составляет свыше семи дней.

neviDimka91 05-03-2019 10:37 2861445

Цитата:

Цитата Iska
neviDimka91, каталог временных файлов может использоваться инсталляциями приложений для временного хранения тех файлов, которые не могут быть заменены непосредственно в момент иснталляции, потому как используются операционной системой или самим приложением, их замена выносится на момент загрузки или предзагрузки операционной системы. Потому удалять всё зараз может не быть хорошо. Поэтому, например, штатная утилита Disk Cleanup удаляет оттуда только те файлы, разница в дате-времени последней модификации которых с текущей датой составляет свыше семи дней. »

спасибо за информацию. скрипт мы все равно запустили, тестируем 3 день, все работает в штатном режиме. 1с сервер ночью перезагружается, сотрудник приходит на работу, запускает rdp подключение, скрипт отрабатывает и он спокойно себе работает в 1с. На следующий день, процедура повторяется, при этом очищается все то, что пользователь наработал накануне

для тех, кто пропустил, код скрипта:
Код:

@echo off
set "sdir=C:\Users\%username%\AppData\Local\Temp\"

pushd "%sdir%"
 rd /s /q "%sdir%" 2>nul
popd


Iska 05-03-2019 14:37 2861514

neviDimka91, неправильно делаете. Вечером поясню.

Nordek 05-03-2019 17:44 2861567

Цитата:

Цитата neviDimka91
и скорее всего есть решение »

Сообщение #6

Цитата:

Цитата Iska
каталог временных файлов может использоваться инсталляциями »

Не обязательно . В данном случае - Busla предоставил верный ответ.
Впрочем неразумным людям всё-равно невдомёк и сделают по своему - "Надо и всё".

neviDimka91 06-03-2019 08:09 2861649

Цитата:

Цитата Iska
neviDimka91, неправильно делаете. Вечером поясню. »

с удовольствием выслушаю. Я еще думаю, может мы не о той папочке ТЕМР говорим, надо разобраться)

Nordek 06-03-2019 10:38 2861663

Цитата:

Цитата neviDimka91
с удовольствием выслушаю. »

Пожалуйста, читайте и вчитывайтесь в статью Очистка диска в Windows 10, 8.1 и 7: расширенная настройка и запуск по расписанию.

Цитата:

Цитата neviDimka91
Я еще думаю, может мы не о той папочке ТЕМР говорим »

%TEMP% опущу. Перейду к более точным место расположениям: %LocalAppData%\Temp или %UserProfile%\AppData\Local\Temp.

neviDimka91 06-03-2019 14:51 2861726

Цитата:

Цитата Nordek
Перейду к более точным место расположениям: »

%LocalAppData%\Temp данную папку вообще не трогаем
%UserProfile%\AppData\Local\Temp - очищается только в том случае, когда пользователь подключается к серверу по RDP

Цитата:

Цитата Nordek
Пожалуйста, читайте и вчитывайтесь в статью »

за ссылку спасибо, обязательно прочитаю

mwz 06-03-2019 15:38 2861735

Цитата:

Цитата neviDimka91
%LocalAppData%\Temp данную папку вообще не трогаем
%UserProfile%\AppData\Local\Temp - очищается только в том случае, когда пользователь подключается к серверу по RDP »

Переменная %LocalAppData% после подстановки разворачивается в C:\Users\<имя_пользователя>\AppData\Local, т.е. ровно туда же, куда и %UserProfile%\AppData\Local

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

neviDimka91 06-03-2019 15:50 2861737

Цитата:

Цитата mwz
в C:\Users\<имя_пользователя>\AppData\Local, т.е. ровно туда же, куда и %UserProfile%\AppData\Local »

по данному пути, в папке ТЕМР всегда замечаются папки (множество папок) с именем из комбинации цифр, например 50, 78,99,25 и тп. в них же находятся в основном документы с расширением pdf, doc, xls, больше ничего. Соответственно данные файлы (как мне известно)прикрепляются где то в программе 1с, мб в каком то поле договора или что-то подобное, я не 1с, точно не скажу.
Как пример пользователь работает в 1с уже больше 3х лет, данная папка ни разу не очищалась, а в ней за все это время накопилось свыше 25гб файлов данного расширения. Посмотрев остальных ~100 юзеров, обнаружили похожую ситуацию.

mwz 06-03-2019 16:06 2861738

Цитата:

Цитата neviDimka91
всегда замечаются папки (множество папок) с именем из комбинации цифр, например 50, 78,99,25 и тп. »

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

Iska 07-03-2019 00:32 2861827

Цитата:

Цитата Nordek
Не обязательно . »

Разве слова «не обязательно» вступают в какое-то противоречие со словом «может» ;)?


Цитата:

Цитата Iska
neviDimka91, неправильно делаете. Вечером поясню. »

Выкладка пояснения затянулась, но всё же:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sTempFolder=%Temp%

if exist "%sTempFolder%\." (
        echo Clear folder [%sTempFolder%]
        pushd "%sTempFolder%" && 2>nul (rmdir /s /q "%sTempFolder%" & popd)
) else (
        echo Not found [%sTempFolder%].
        exit /b 1
)

endlocal
exit /b 0

Ключевые, с моей точки зрения, места в коде выделил.

YuS_2 07-03-2019 08:36 2861855

Цитата:

Цитата Iska
if exist "%sTempFolder%\." »

В некоторых случаях, это не очень хорошая идея, использовать точку для проверки существования каталога ...
Поясню картинкой:

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

neviDimka91 07-03-2019 09:02 2861856

Цитата:

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

ко времени запуска скрипта, загрузка ОС завершена и все обновления так же установлены.

Цитата:

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

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

Цитата:

Цитата Iska
Ключевые, с моей точки зрения, места в коде выделил. »

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

Iska 07-03-2019 14:50 2861901

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

Цитата:

Цитата neviDimka91
то переходим в каталог и очищаем содержимое »

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

YuS_2 07-03-2019 22:00 2862006

Цитата:

Цитата Iska
У Вас есть идеи — отчего так?! »

Видимо, какой-то скрытый баг интерпретатора, потому как путь такой, на самом деле ведь не существует и при попытке перейти по нему, будет выдано сообщение об ошибке...

Busla 07-03-2019 23:30 2862018

Цитата:

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

да, несколько неожиданно, хотя в чём-то даже логично: точка - скорее оператор(?) контекста, чем относительный путь

Цитата:

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

на файл тоже нельзя перейти, так что не аргумент


Цитата:

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

логично предположить, что если если одни файлы уже используются системой, то некоторые соседние могут понадобиться чуть позже

Iska 08-03-2019 06:41 2862045

Цитата:

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

Цитата:

Цитата Busla
да, несколько неожиданно, хотя в чём-то даже логично: точка - скорее оператор(?) контекста, чем относительный путь »

Похоже, проблема несколько глубже, нежели чем просто в отдельно взятом интерпретаторе команд: то же самое наблюдается в WSH, PowerShell, .Net. Возможно, дело в функции WinAPI, но мне что-то лень ковырять :).

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

YuS_2 08-03-2019 14:18 2862099

Цитата:

Цитата 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

- никакого разумного объяснения, лично я, не нашел...

alpap 24-03-2019 22:57 2864911

Цитата:

Цитата YuS_2
В некоторых случаях, это не очень хорошая идея, использовать точку для проверки существования каталога ... »

а так?
Код:

@echo off
echo "%~a1"|>nul find "d" && echo Folder || echo File
pause


YuS_2 25-03-2019 08:06 2864925

Цитата:

Цитата alpap
а так? »

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

alpap 25-03-2019 23:27 2865139

Цитата:

Цитата YuS_2
понадобится двойная проверка »

ну для студентов разных может быть, а для того кто делом занимается, достаточно, так как уж он точно знает и понимает что задает параметром, тем более можно и так поступить:
Код:

@echo off
for /f "delims=" %%a in ('dir /b "Имя или часть*"') do echo "%%~aa"|>nul find "d" && echo Folder || echo File
pause& exit

тут левый набор не прокатит, так как будет ошибка просто - файл не найден.

Опиум 04-04-2019 17:29 2866585

Цитата:

Цитата neviDimka91
Disk Cleanup удаляет оттуда только те файлы, разница в дате-времени последней модификации которых с текущей датой составляет свыше семи дней. »

я бы чтонить такое намутил...
Код:

robocopy /e /xj /minage:7 /mov /r:0 /w:0 %temp% %temp%\_old_ /xd _old_
rd /s /q %temp%\_old_


neviDimka91 24-04-2019 11:15 2868961

Раз уж тут так много знающих людей по работе и написанию скриптов , могу я вас попросить о помощи. Есть тот же сервер, к которому по RDP подключаются пользователи. На этом сервере, по пути C:\User\ лежат их папки с профилями. Так вот у каждого в этом профиле есть папочка, а именно путь к ней такой C:\Users\username\AppData\Roaming\1C\1CEStart в этой папке лежит файлик 1CEStart.cfg. Периодически мы изменяем этот файлик и его нужно распространить всем пользователям, как бы заменить. Как при помощи скрипта это сделать?

alpap 24-04-2019 13:53 2868996

так, если есть имена под рукой
Код:

@echo off
set "in=D:\Papka\1CEStart.cfg"

for %%d in ("Петя" "Вася" "Yulya 9") do copy /y "%in%" "C:\Users\%%~d\AppData\Roaming\1C\1CEStart"
pause

или так
Код:

@echo off
set "in=D:\Papka\1CEStart.cfg"

for /f "skip=2 tokens=2,4*" %%a in ('qwinsta') do set "s=%%c"& call :# "%%a" "%%b"
pause& exit

:#
 if defined s (set "name=%~1 %~2") else (set "name=%~1")
 copy /y "%in%" "C:\Users\%name%\AppData\Roaming\1C\1CEStart"
exit /b


Iska 24-04-2019 17:11 2869033

neviDimka91, домен есть, эти пользователи доменные?

neviDimka91 25-04-2019 08:37 2869106

Цитата:

Цитата Iska
neviDimka91, домен есть, эти пользователи доменные? »

да, я пробовал через ГПО делать, но файлик не создается и не заменяется в данной папке, я так и не понял, почему это не происходит

по поводу кода, что постом выше, надо будет попробовать, спасибо

Busla 25-04-2019 11:45 2869133

Цитата:

Цитата neviDimka91
лежит файлик 1CEStart.cfg. Периодически мы изменяем этот файлик и его нужно распространить всем пользователям »

нужно один раз в нём прописать ссылку на общий конфиг на сетевом ресурсе, и не изобретать велосипед по замене файлов
и вообще- это офтопик, неужели непонятно, что вопрос к теме не относится

neviDimka91 26-04-2019 10:32 2869254

Цитата:

Цитата Busla
нужно один раз в нём прописать ссылку на общий конфиг на сетевом ресурсе, и не изобретать велосипед по замене файлов »

в этом файле прописаны путь к базам, например:

CommonInfoBases=\\srv-fs-ip\allbase$\sta_do.v8i

и таких путей в этом файле 22. Соответственно, когда появляется новая база, создается файлик с расширением .v8i и в файле 1CEStart.cfg прописываем данный путь к этому файлу.
Потом когда какому то пользователю необходимо подключить данную базу, я на домене вношу его в специальную группу доступа и база подключается автоматически. И что бы это отработало на 100%, необходимо в его профиле на сервере заменить файл 1CEStart.cfg на новый (где новая база)

Busla 26-04-2019 10:56 2869262

neviDimka91, вот и пропишите в общем сетевом common.cfg свои 22 пути
а в локальном только
Код:

CommonCfgLocation=\\srv-fs-ip\allbase$\common.cfg


Время: 13:03.

Время: 13:03.
© OSzone.net 2001-