Показать полную графическую версию : [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов
truvo
применительно к моему батнику в посте 209 (см.) как это выглядит? »понятия не имею, так как твой батник не соответствует твоему описанию:
- папки Profile в каталоге-источнике нет, зато она есть в каталоге-приемнике;
- каталога XYZ в батнике в упор не вижу, где батник лежит? в "d:\backup\opera"?
net send %computername% "твое сообщение" »или так :)
msg %username% "твое сообщение"
amel27, спасибо, я давно пытался вспомнить, как пишется эта долбаная команда :)
Всем: msg %username% "твое сообщение" »
будет предпочтительнее, чем net send %computername% "твое сообщение" »
- ей наличие службы сообщений не требуется. Правда и отсылать на другие компьютеры она, похоже, не умеет.
Цитата Strange_V:
net send %computername% "твое сообщение" »
или так
Код:
msg %username% "твое сообщение" »
Первое у меня не сработало.
Кстати, msg %username% "твое сообщение" »
сообщение выводит процесс csrss.exe :)
Первое у меня не сработало »
тебе отдельно, раз выше (http://forum.oszone.net/post-846592.html#post846592) не читаешь:
иметь запущеным сервис "служба сообщений"
>
сообщение выводит процесс csrss.exe »
сообщение выводит то, что ему сказано выводить.
Статья The Windows NT Command Shell By Tim Hill (http://www.microsoft.com/technet/archive/winntas/deploy/prodspecs/shellscr.mspx?mfr=true) на английском языке для страждующих помощи при написании *.bat файлов. Ссылка для выноса в шапку в самый раз.
Большая просьба ко всем. Я выкладывал текст бат-файла, давно уже, вот здесь: http://forum.oszone.net/post-784912-117.html Никто на ту мою просьбу так и не отреагировал, и хочу ее повторить. Ну, может, погода изменилась, настроение, новые люди на форум пришли - может, кто и выручит теперь. Надо бы отрецензировать тот батник, может, поправить как-нибудь. Поскольку, например, файлы из папки Temporary Internet Files он у меня не удаляет, хотя и должен.
Народ, подскажите пожалуйста:
Нуж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
Но вот что то он не хочет работать...
Может кто предложит как проще реализовать?
сообщение выводит то, что ему сказано выводить. »
Я просто написал, какому процессу принадлежит окно.
Может кто предложит как проще реализовать? »например так (имена каталогов в 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
Подскажите пожалуйста код 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
заранее благодарен за оказанную помощь ...
ИМХО достаточно двух команд (ATTRIB необязателен для RD):Set TempDir=%SystemRoot%\Temp
RD "%TempDir%" /S /Q
If Not Exist "%TempDir%" MD "%TempDir%"
Но тут есть одна проблема - при удалении/создании каталога сбрасываются NTFS-права, поэтому если быть совсем правильным, то нужно восстанавливать ACL, назначенный каталогу при установке системы (при помощи CACLS или XCACLS).
amel27, Но тут есть одна проблема - при удалении/создании каталога сбрасываются NTFS-права, поэтому если быть совсем правильным, то нужно восстанавливать ACL, назначенный каталогу при установке системы (при помощи CACLS или XCACLS). », а теперь как для полного чайника поподробнее пожалуйста и если можно простой пример или готовую реализацию ...
гм, дефолтовые права на 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
amel27, га круто чем мой вариант плох ??? и зачем это делать ? на нем и так куча прав например для того чтобы там появился вирус или еще чтото ...
amel27, а может просто папке темп поменять так права чтобы она ни при каких обстоятельствах не удалялась ... а удалялось лишь то что в ней ...
ИМХО достаточно двух команд (ATTRIB необязателен для RD): », лично мне казалось что это для команды DEL "%systemroot%\Temp\*.*" /S /Q
и еще одно так для общего развития будет ли работать в таком виде:
If Not Exist "%systemroot%\Temp" MD "%systemroot%\Temp"
круто чем мой вариант плох ??? и зачем это делать ? на нем и так куча прав например для того чтобы там появился вирус или еще чтото »Могу только догадываться о причинах, по которым даны именно такие права, а не другие - к примеру, на 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
будет ли работать в таком виде »будет, поскольку пробелов в имени нет я кавычки опустил
amel27, хорошо если это так сложно на bat/cmd, возможно это будет проще реализовать на другом скрип языке и возможно даже в виде утилиты ... а может даже добавить туда очистку "%SystemRoot%\Prefetch\" как это реализовано в программе TweakNow, что скажете по этому поводу ...
Почему для очистки папки TEMP все упорно указывают на %SystemRoot% и никто не подумал что переменные среды могут быть изменены самим пользователем?
Например папка TEMP может находится и в корне системного диска %SYSTEMDRIVE% (ди и вообще -где угодно).
Для начала неплохо бы выяснить переменную среду для временной папки, а уж потом удалять.
Забыли про переменную %USERPROFILE%\Local Settings\Temp которая так же, может быть изменена.
Может лучше как-то так %TEMP% или так %TMP%?
TEMP (системная) и ТМР (локальная) - Возвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP. Потенциально TEMP и TMP могут указывать на разные каталоги, но обычно - совпадают.
yurfed, для начала я знаю что я делаю так как назначаю темп только в одно место ... тоесть %systemroot%\Temp и это делаю не для когото а для себя ... хотите предложить универсальный вариант, прошу, а то разводить догадки мы все можем а вот сделать дело немногие, но в целом использовать переменную среду %TEMP% и %TMP% более правильно но вот только тогда нужно писать файл и для удаления %TEMP% и %TMP%, а если они в одном месте и заведомо %systemroot%\Temp так наверное проще ... хотя тут спорный вариант ... я думаю что лишь из немногих рядовых пользователей знают что такое переменная среда ... и менять ее не станут ...
для начала я знаю что я делаю » флаг тебе в руки, делай.
Сам я не специалист по написанию батников, но было предложено выйти при написании из разряда "Для себя любимого" в разряд -"Для всех".
Вычищает TEMP локального пользователя
PUSHD %temp%
RD /S /Q %temp% >Nul 2>&1
POPD
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.