Показать полную графическую версию : Батник для запуска chkdsk по первым числам месяца
Всех приветствую!
Нужен батник, который будет запускаться через GPO, и выполнять следующие операции только по 01 числам:
1. Определение даты
2. Если дата = 01, то выполняется команда “echo y|chkdsk %systemdrive% /f /x” и c последующей перезагрузкой компьютера.
3. Если дата не ровняется 01, то ничего не происходит.
помогите пожалуйста, с батником.
@echo off
for /f "delims=./" %%i in ("%date%") do (
for /f "tokens=* delims=0 " %%j in ("%%i") do (
if %%j==1 (
echo y| chkdsk %systemdrive% /f /x
)
)
)
exit /b
Вообще-то для этого предназначено «chkntfs.exe /c …» (и «fsutil.exe dirty set …», если так уж хочется принудительной проверки): Chkdsk (http://technet.microsoft.com/en-us/library/cc730714.aspx).
Примерно так:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in (
`wmic.exe OS get LocalDateTime ^| findstr.exe /r /c:"......01.*"`
) do (
echo y|chkdsk.exe %SystemDrive% /f /x
shutdown.exe -r -t 10
)
endlocal
exit /b 0
Georgio и Iska, спасибо! Отрабатывают оба батника.
Проверил через GPO в домене на клиенте Win 7.
Только в первом варианте убрал пробел между «y| chkdsk», и добавил shutdown.exe -r -t 10 как во втором варианте.
Вообще-то для этого предназначено «chkntfs.exe /c …» (и «fsutil.exe dirty set …», если так уж хочется принудительной проверки): Chkdsk. »
Вы считает, что не совсем правильно выполнять проверку диска chkdsk?
Тут только возник один неприятный момент: происходит циклическая перезагрузка-проверка.
А можно ли, как нибудь приделать, чтобы проверка выполнялась только один раз в сутки?
А то даже если отказаться от команды «shutdown.exe -r -t 10», то все равно будет каждый раз при перезагрузке, в течении дня отрабатываться команда на проверку.
Тут только возник один неприятный момент: происходит циклическая перезагрузка-проверка.
…
А то даже если отказаться от команды «shutdown.exe -r -t 10», то все равно будет каждый раз при перезагрузке, в течении дня отрабатываться команда на проверку. »
Вы считает, что не совсем правильно выполнять проверку диска chkdsk? »
Вот поэтому я и привёл ссылку, чем можно заменить ;).
«Приделать»-то, конечно, всё можно, если вертеть в руках достаточно долго, но мне, в принципе, вовсе непонятен смысл Вашего желания назначать периодическую проверку системного раздела при загрузке системы в рамках групповой политики. Операционные системы на базе NT, как правило, вполне справляются сами с отслеживанием ситуаций, требующих проверки разделов на наличие ошибок (в отличие от старых ОС).
«Приделать»-то, конечно, всё можно, если вертеть в руках достаточно долго, но мне, в принципе, вовсе непонятен смысл Вашего желания назначать периодическую проверку системного раздела при загрузке системы в рамках групповой политики. Операционные системы на базе NT, как правило, вполне справляются сами с отслеживанием ситуаций, требующих проверки разделов на наличие ошибок (в отличие от старых ОС). »
Суть решения назначить проверку диска принудительно через групповые политики 1-раз в месяц такова, что когда начинаешь выполнять именно принудительно такую проверку, то примерно у 5-10 машин в сети (из 200), есть ошибки. Хотя да, согласен, что NT должны сами автоматом исправлять ошибки.
Парк машин 50/50 = XP/7 (не считая серверную часть). Ошибки возникают как на XP, так и на 7. Особенно статистика показывает, что больше возникает ошибок на машинах, где весь день сёрфят в интернете.
Сейчас на данный момент задача запуска один раз в месяц, - решается с помощью корпоративного касперского, через задачи (запихнул туда батник). Почему смотрю в сторону запуска через GPO? Потому что антивирус не на всех машинах есть.
Попробую изучить альтернативу chkntfs.exe
Пока сделал так:
@echo off
forfiles /p %systemdrive% /m chkdsk.log /d -1 /c "cmd /c del /q /f @file"
if not exist "%systemdrive%\chkdsk.log" (
for /f "delims=./" %%i in ("%date%") do (
for /f "tokens=* delims=0 " %%j in ("%%i") do (
if %%j==1 (
echo y|chkdsk %systemdrive% /f /x > %systemdrive%\chkdsk.log
shutdown.exe -r -t 10
)
)
)
)
exit /b
Со вторым батником не заработало.
Подскажите, как заменить forfiles удаление лога, на альтернативу, т.к. forfiles – нет в XP?
т.к. forfiles – нет в XP? »
Есть. Берите из комплектов Resource Kit'ов.
Взять forfiles конечно с Resource Kit'ов можно, но надо же распространить на все компы с XP в сети, тут уже другая заморочка. Хочется, чтобы из коробки было.
А если пойти другим путем, - как инвертировать батник, чтобы выполнялась команда "del файл" – всегда, кроме первого числа?
но надо же распространить на все компы с XP в сети »
я в логон скрипте копирую частоиспользуемые, но некоробочные и\или самописные утилиты с сервера в %temp% рабочей станции. Оттуда и вызываю.
if not exist %temp%\myutil.exe copy \\server\share\myutil.exe %temp%\
Кстати..а что будет со станцией, которую, ну так вышло... никогда не включают 1-го числа?))
Вроде вопрос решен, но другим методом:
1. Отказался от запуска по первым числам (тут не так важно именно по первым числам, а главное один раз в месяц).
2. Нашел в сети альтернативный батник (http://www.celitel.info/klad/nhelp/helpbat.php?dcmd=ex_date) для удаления файла по истечению срока, в данном случае замена "forfiles"
Батник при запуске системы (выполняется удаление файла "chkdsk.log", по истечению 30 дней):
@echo off
setlocal enabledelayedexpansion
set N=30
set MASK=chkdsk.log
set SOURCE=%SYSTEMDRIVE%
call :raschet %date% days_to_today
pushd %SOURCE%
for /f "tokens=*" %%a in ('dir /b /a:-d %MASK%') do (
set filedate=%%~ta
call :raschet !filedate:~0,10! days_to_date_of_file
set /a raznitsa=%days_to_today%-!days_to_date_of_file!
if !raznitsa! gtr %N% del /q "%%a"
)
popd
exit
:raschet
for /f "delims=. tokens=1-3" %%a in ('echo %~1') do (
set /a years=%%c*365+%%c/4
set /a prev_year=%%c-1
set /a result_year=%%c/4
set /a result_prev_year=!prev_year!/4
set /a vis=!result_year!-!result_prev_year!
if !vis!==1 (
if %%b==01 set /a years=!years!-1
if %%b==02 set /a years=!years!-1
)
if %%b==01 set months=0
if %%b==02 set months=31
if %%b==03 set months=59
if %%b==04 set months=90
if %%b==05 set months=120
if %%b==06 set months=151
if %%b==07 set months=181
if %%b==08 set months=212
if %%b==09 set months=243
if %%b==10 set months=273
if %%b==11 set months=304
if %%b==12 set months=334
set days=%%a
set firstsym=!days:~0,1!
if !firstsym!==0 set days=!days:~1,1!
set /a %~2=!years!+!months!+!days!
)
Батник при завершение работы системы (выполняется проверка существования файла "chkdsk.log", если нет, то выполняет chkdsk, и при следующем перезагрузке будет произведена проверка и исправление диска на ошибки).
@echo off
if not exist "%systemdrive%\chkdsk.log" (
echo y|chkdsk %systemdrive% /f /x > %systemdrive%\chkdsk.log
)
exit /b
Подскажите, как заменить forfiles удаление лога, на альтернативу, т.к. forfiles – нет в XP? »
for %%i in ("%systemdrive%\chkdsk.log") do (
for /f %%j in ("%%~ti") do (
if not %%j==%date% (
echo del /q /f %%i
)
)
)
А если пойти другим путем, - как инвертировать батник, чтобы выполнялась команда "del файл" – всегда, кроме первого числа? »
@echo off
for /f "delims=./" %%i in ("%date%") do (
for /f "tokens=* delims=0 " %%j in ("%%i") do (
if not %%j==1 (
del /a /f "some file"
)
)
)
exit /b
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.