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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Батник для запуска chkdsk по первым числам месяца (http://forum.oszone.net/showthread.php?t=284622)

PowerZ 05-07-2014 19:59 2372474

Батник для запуска chkdsk по первым числам месяца
 
Всех приветствую!

Нужен батник, который будет запускаться через GPO, и выполнять следующие операции только по 01 числам:

1. Определение даты
2. Если дата = 01, то выполняется команда “echo y|chkdsk %systemdrive% /f /x” и c последующей перезагрузкой компьютера.
3. Если дата не ровняется 01, то ничего не происходит.

помогите пожалуйста, с батником.

Georgio 05-07-2014 20:38 2372482

Код:

@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


Iska 06-07-2014 06:43 2372590

Вообще-то для этого предназначено «chkntfs.exe /c …» (и «fsutil.exe dirty set …», если так уж хочется принудительной проверки): Chkdsk.

Примерно так:
читать дальше »
Код:

@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


PowerZ 06-07-2014 12:19 2372667

Georgio и Iska, спасибо! Отрабатывают оба батника.

Проверил через GPO в домене на клиенте Win 7.

Только в первом варианте убрал пробел между «y| chkdsk», и добавил shutdown.exe -r -t 10 как во втором варианте.

Цитата:

Цитата Iska
Вообще-то для этого предназначено «chkntfs.exe /c …» (и «fsutil.exe dirty set …», если так уж хочется принудительной проверки): Chkdsk. »

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

Тут только возник один неприятный момент: происходит циклическая перезагрузка-проверка.

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

А то даже если отказаться от команды «shutdown.exe -r -t 10», то все равно будет каждый раз при перезагрузке, в течении дня отрабатываться команда на проверку.

Iska 07-07-2014 05:15 2372988

Цитата:

Цитата PowerZ
Тут только возник один неприятный момент: происходит циклическая перезагрузка-проверка.

А то даже если отказаться от команды «shutdown.exe -r -t 10», то все равно будет каждый раз при перезагрузке, в течении дня отрабатываться команда на проверку. »

Цитата:

Цитата PowerZ
Вы считает, что не совсем правильно выполнять проверку диска chkdsk? »

Вот поэтому я и привёл ссылку, чем можно заменить ;).

«Приделать»-то, конечно, всё можно, если вертеть в руках достаточно долго, но мне, в принципе, вовсе непонятен смысл Вашего желания назначать периодическую проверку системного раздела при загрузке системы в рамках групповой политики. Операционные системы на базе NT, как правило, вполне справляются сами с отслеживанием ситуаций, требующих проверки разделов на наличие ошибок (в отличие от старых ОС).

PowerZ 07-07-2014 08:56 2373014

Цитата:

Цитата Iska
«Приделать»-то, конечно, всё можно, если вертеть в руках достаточно долго, но мне, в принципе, вовсе непонятен смысл Вашего желания назначать периодическую проверку системного раздела при загрузке системы в рамках групповой политики. Операционные системы на базе NT, как правило, вполне справляются сами с отслеживанием ситуаций, требующих проверки разделов на наличие ошибок (в отличие от старых ОС). »

Суть решения назначить проверку диска принудительно через групповые политики 1-раз в месяц такова, что когда начинаешь выполнять именно принудительно такую проверку, то примерно у 5-10 машин в сети (из 200), есть ошибки. Хотя да, согласен, что NT должны сами автоматом исправлять ошибки.
Парк машин 50/50 = XP/7 (не считая серверную часть). Ошибки возникают как на XP, так и на 7. Особенно статистика показывает, что больше возникает ошибок на машинах, где весь день сёрфят в интернете.
Сейчас на данный момент задача запуска один раз в месяц, - решается с помощью корпоративного касперского, через задачи (запихнул туда батник). Почему смотрю в сторону запуска через GPO? Потому что антивирус не на всех машинах есть.
Попробую изучить альтернативу chkntfs.exe

PowerZ 08-07-2014 11:00 2373532

Пока сделал так:
Код:

@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?

Iska 08-07-2014 14:40 2373623

Цитата:

Цитата PowerZ
т.к. forfiles – нет в XP? »

Есть. Берите из комплектов Resource Kit'ов.

PowerZ 08-07-2014 14:52 2373628

Взять forfiles конечно с Resource Kit'ов можно, но надо же распространить на все компы с XP в сети, тут уже другая заморочка. Хочется, чтобы из коробки было.
А если пойти другим путем, - как инвертировать батник, чтобы выполнялась команда "del файл" – всегда, кроме первого числа?

Опиум 08-07-2014 17:42 2373733

Цитата:

Цитата PowerZ
но надо же распространить на все компы с XP в сети »

я в логон скрипте копирую частоиспользуемые, но некоробочные и\или самописные утилиты с сервера в %temp% рабочей станции. Оттуда и вызываю.

Код:

if not exist %temp%\myutil.exe  copy \\server\share\myutil.exe %temp%\
Кстати..а что будет со станцией, которую, ну так вышло... никогда не включают 1-го числа?))

PowerZ 08-07-2014 21:35 2373834

Вроде вопрос решен, но другим методом:
1. Отказался от запуска по первым числам (тут не так важно именно по первым числам, а главное один раз в месяц).
2. Нашел в сети альтернативный батник для удаления файла по истечению срока, в данном случае замена "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


Georgio 08-07-2014 21:35 2373835

Цитата:

Цитата PowerZ
Подскажите, как заменить 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
  )
  )
 )


Цитата:

Цитата PowerZ
А если пойти другим путем, - как инвертировать батник, чтобы выполнялась команда "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



Время: 16:37.

Время: 16:37.
© OSzone.net 2001-