Войти

Показать полную графическую версию : [решено] Очищение папки TEMP


Страниц : 1 [2]

YuS_2
07-03-2019, 08:36
if exist "%sTempFolder%\." »
В некоторых случаях, это не очень хорошая идея, использовать точку для проверки существования каталога ...
Поясню картинкой:
https://jpegshare.net/thumbs/bf/3a/bf3a3662576c777ec9a3d21a41790ddb.jpg (https://jpegshare.net/bf/3a/bf3a3662576c777ec9a3d21a41790ddb.png.html)
Названия соответствуют существующим элементам, т.е. "file" - файл, "FOLDER" - каталог

neviDimka91
07-03-2019, 09:02
Их можно грохать все, но только после завершения загрузки »
ко времени запуска скрипта, загрузка ОС завершена и все обновления так же установлены.

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

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

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

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

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

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

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

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

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

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

YuS_2
08-03-2019, 14:18
хотя в чём-то даже логично »
Не очень. Точка -оператор текущего каталога, но там его просто не существует, т.к. это файл.
на файл тоже нельзя перейти, так что не аргумент »
Как раз, аргумент присутствия бага, вопрос только в том, где он закопался...
На файл условный оператор указывает правильно:
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
В некоторых случаях, это не очень хорошая идея, использовать точку для проверки существования каталога ... »
а так?

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

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

alpap
25-03-2019, 23:27
понадобится двойная проверка »
ну для студентов разных может быть, а для того кто делом занимается, достаточно, так как уж он точно знает и понимает что задает параметром, тем более можно и так поступить:

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

alpap
24-04-2019, 13:53
так, если есть имена под рукой

@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
neviDimka91, домен есть, эти пользователи доменные?

neviDimka91
25-04-2019, 08:37
neviDimka91, домен есть, эти пользователи доменные? »
да, я пробовал через ГПО делать, но файлик не создается и не заменяется в данной папке, я так и не понял, почему это не происходит

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

Busla
25-04-2019, 11:45
лежит файлик 1CEStart.cfg. Периодически мы изменяем этот файлик и его нужно распространить всем пользователям »
нужно один раз в нём прописать ссылку на общий конфиг на сетевом ресурсе, и не изобретать велосипед по замене файлов
и вообще- это офтопик, неужели непонятно, что вопрос к теме не относится

neviDimka91
26-04-2019, 10:32
нужно один раз в нём прописать ссылку на общий конфиг на сетевом ресурсе, и не изобретать велосипед по замене файлов »
в этом файле прописаны путь к базам, например:

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

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

Busla
26-04-2019, 10:56
neviDimka91, вот и пропишите в общем сетевом common.cfg свои 22 пути
а в локальном только
CommonCfgLocation=\\srv-fs-ip\allbase$\common.cfg




© OSzone.net 2001-2012