Войти

Показать полную графическую версию : [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов


Страниц : 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

amel27
09-07-2008, 14:10
truvo
применительно к моему батнику в посте 209 (см.) как это выглядит? »понятия не имею, так как твой батник не соответствует твоему описанию:

- папки Profile в каталоге-источнике нет, зато она есть в каталоге-приемнике;
- каталога XYZ в батнике в упор не вижу, где батник лежит? в "d:\backup\opera"?


net send %computername% "твое сообщение" »или так :)
msg %username% "твое сообщение"

ShaddyR
09-07-2008, 14:34
amel27, спасибо, я давно пытался вспомнить, как пишется эта долбаная команда :)

Всем: msg %username% "твое сообщение" »
будет предпочтительнее, чем net send %computername% "твое сообщение" »
- ей наличие службы сообщений не требуется. Правда и отсылать на другие компьютеры она, похоже, не умеет.

Котяра
09-07-2008, 15:06
Цитата Strange_V:
net send %computername% "твое сообщение" »
или так
Код:
msg %username% "твое сообщение" »
Первое у меня не сработало.

Кстати, msg %username% "твое сообщение" »
сообщение выводит процесс csrss.exe :)

ShaddyR
09-07-2008, 15:26
Первое у меня не сработало »
тебе отдельно, раз выше (http://forum.oszone.net/post-846592.html#post846592) не читаешь:
иметь запущеным сервис "служба сообщений"
>
сообщение выводит процесс csrss.exe »
сообщение выводит то, что ему сказано выводить.

Admiral
13-07-2008, 21:36
Статья The Windows NT Command Shell By Tim Hill (http://www.microsoft.com/technet/archive/winntas/deploy/prodspecs/shellscr.mspx?mfr=true) на английском языке для страждующих помощи при написании *.bat файлов. Ссылка для выноса в шапку в самый раз.

truvo
18-07-2008, 15:31
Большая просьба ко всем. Я выкладывал текст бат-файла, давно уже, вот здесь: http://forum.oszone.net/post-784912-117.html Никто на ту мою просьбу так и не отреагировал, и хочу ее повторить. Ну, может, погода изменилась, настроение, новые люди на форум пришли - может, кто и выручит теперь. Надо бы отрецензировать тот батник, может, поправить как-нибудь. Поскольку, например, файлы из папки Temporary Internet Files он у меня не удаляет, хотя и должен.

LooTer
18-07-2008, 15:49
Народ, подскажите пожалуйста:

Нужeн батник, который бы удалял из папки в которой лежит те папки, которые не входят в список(лежащий рядом list.txt )

Код который я написал:


SETLOCAL ENABLEEXTENSIONS
@echo off

call :read_list %~dp0\list.txt || exit /b 1

exit /b 0

:read_list

set LISTFILE=%1

if not exist %LISTFILE% (
echo FAIL: Файл со списком отсутствует
exit /b 1
)

set VAR=no
for /f "usebackq delims==" %%i in (`"dir "%cdd%" /ad /b"`) do (
for /f %%j in (%LISTFILE%) do (
if %%i==%%j (set VAR=yes)
)
if "!VAR!"=="no" (rd /s /q %%i)
set VAR=no)
pause
set VAR=no
)

exit /b 0


Но вот что то он не хочет работать...
Может кто предложит как проще реализовать?

Котяра
18-07-2008, 16:35
сообщение выводит то, что ему сказано выводить. »
Я просто написал, какому процессу принадлежит окно.

amel27
21-07-2008, 05:54
Может кто предложит как проще реализовать? »например так (имена каталогов в LIST.TXT и "DIR /B /AD" должны совпадать):
@Echo Off
SetLocal EnableDelayedExpansion

Set ListFile=list.txt
If Not Exist %ListFile% (
Echo FAIL: Файл со списком отсутствует
Exit /B 1
)

For /F "delims=" %%i In ('DIR /B /AD') Do (
FindStr /BEIC:"%%i" %ListFile% 1>Nul 2>Nul
If !ERRORLEVEL!==1 RD /S /Q "%%i"
)

Exit /B 0

zeroua
24-07-2008, 10:07
Подскажите пожалуйста код cmd/bat файла для очистки темпа "вот мой скромный вариант". поправьте ели что не так (может конечно это и вовсе неправильно, вообще нужен совет или правильный вариант):

@echo off

attrib -R -H -S "%systemroot%\Temp\*.*" /S
echo.
DEL "%systemroot%\Temp\*.*" /S /Q
echo.
RD "%systemroot%\Temp" /S /Q
echo.
MD "%systemroot%\Temp"

EXIT

заранее благодарен за оказанную помощь ...

amel27
24-07-2008, 12:15
ИМХО достаточно двух команд (ATTRIB необязателен для RD):Set TempDir=%SystemRoot%\Temp

RD "%TempDir%" /S /Q
If Not Exist "%TempDir%" MD "%TempDir%"
Но тут есть одна проблема - при удалении/создании каталога сбрасываются NTFS-права, поэтому если быть совсем правильным, то нужно восстанавливать ACL, назначенный каталогу при установке системы (при помощи CACLS или XCACLS).

zeroua
24-07-2008, 12:19
amel27, Но тут есть одна проблема - при удалении/создании каталога сбрасываются NTFS-права, поэтому если быть совсем правильным, то нужно восстанавливать ACL, назначенный каталогу при установке системы (при помощи CACLS или XCACLS). », а теперь как для полного чайника поподробнее пожалуйста и если можно простой пример или готовую реализацию ...

amel27
24-07-2008, 14:39
гм, дефолтовые права на TEMP оказались довольно хитрыми и точно восстановить с помощью штатных утилит не получается, разве только SUBINACL использовать, но ее нужно дополнительно копировать... Можно сделать следующий финт: создать в TEMP пустую подпапку (при этом она наследует права TEMP) и потом поставить ее на место хозяина:Set TempDir=%SystemRoot%\Temp

MD %TempDir%\~Temp
MD %TempDir%\~~Temp
MOVE %TempDir%\~Temp %SystemRoot%\

RD /S /Q %TempDir%
If Exist %TempDir% (
RD /Q %SystemRoot%\~Temp
) ELSE (
REN %SystemRoot%\~Temp Temp
)

З.Ы. второй MD нужен чтобы освободить ~Temp, иначе не дает переместить следующим MOVE

zeroua
24-07-2008, 15:45
amel27, га круто чем мой вариант плох ??? и зачем это делать ? на нем и так куча прав например для того чтобы там появился вирус или еще чтото ...

zeroua
24-07-2008, 22:56
amel27, а может просто папке темп поменять так права чтобы она ни при каких обстоятельствах не удалялась ... а удалялось лишь то что в ней ...

ИМХО достаточно двух команд (ATTRIB необязателен для RD): », лично мне казалось что это для команды DEL "%systemroot%\Temp\*.*" /S /Q

и еще одно так для общего развития будет ли работать в таком виде:

If Not Exist "%systemroot%\Temp" MD "%systemroot%\Temp"

amel27
25-07-2008, 03:39
круто чем мой вариант плох ??? и зачем это делать ? на нем и так куча прав например для того чтобы там появился вирус или еще чтото »Могу только догадываться о причинах, по которым даны именно такие права, а не другие - к примеру, на TEMP имеет права учетка SYSTEM, под которой обычно работают службы... после пересоздания она теряет свои права (в группу "Администраторы" она не входит). Насчет вирусов... ИМХО дефолтовые права тоже не ламеры рисовали, добавление права равно как и его удаление должно быть всегда обосновано. Вот ремейк твоего варианта, оптимизированный по скорости выполнения и без удаления TEMP:PUSHD %SystemRoot%\Temp

For /F %%i In ('DIR /B /A:D *') Do RD /Q /S %%i
ATTRIB -R -S -H *
DEL /F /Q *

POPD


может просто папке темп поменять так права чтобы она ни при каких обстоятельствах не удалялась ... а удалялось лишь то что в ней »есть идея получше - открыть папку TEMP и вызвать RD, тогда все содержимое будет удалено кроме самой TEMP (будет выдана ошибка доступа):PUSHD %SystemRoot%\Temp
RD /S /Q %SystemRoot%\Temp >Nul 2>&1
POPD


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

zeroua
25-07-2008, 09:11
amel27, хорошо если это так сложно на bat/cmd, возможно это будет проще реализовать на другом скрип языке и возможно даже в виде утилиты ... а может даже добавить туда очистку "%SystemRoot%\Prefetch\" как это реализовано в программе TweakNow, что скажете по этому поводу ...

yurfed
25-07-2008, 13:48
Почему для очистки папки TEMP все упорно указывают на %SystemRoot% и никто не подумал что переменные среды могут быть изменены самим пользователем?

Например папка TEMP может находится и в корне системного диска %SYSTEMDRIVE% (ди и вообще -где угодно).
Для начала неплохо бы выяснить переменную среду для временной папки, а уж потом удалять.

Забыли про переменную %USERPROFILE%\Local Settings\Temp которая так же, может быть изменена.

Может лучше как-то так %TEMP% или так %TMP%?

TEMP (системная) и ТМР (локальная) - Возвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP. Потенциально TEMP и TMP могут указывать на разные каталоги, но обычно - совпадают.

zeroua
25-07-2008, 14:02
yurfed, для начала я знаю что я делаю так как назначаю темп только в одно место ... тоесть %systemroot%\Temp и это делаю не для когото а для себя ... хотите предложить универсальный вариант, прошу, а то разводить догадки мы все можем а вот сделать дело немногие, но в целом использовать переменную среду %TEMP% и %TMP% более правильно но вот только тогда нужно писать файл и для удаления %TEMP% и %TMP%, а если они в одном месте и заведомо %systemroot%\Temp так наверное проще ... хотя тут спорный вариант ... я думаю что лишь из немногих рядовых пользователей знают что такое переменная среда ... и менять ее не станут ...

yurfed
25-07-2008, 14:18
для начала я знаю что я делаю » флаг тебе в руки, делай.

Сам я не специалист по написанию батников, но было предложено выйти при написании из разряда "Для себя любимого" в разряд -"Для всех".

Вычищает TEMP локального пользователя
PUSHD %temp%
RD /S /Q %temp% >Nul 2>&1
POPD




© OSzone.net 2001-2012