PDA

Показать полную графическую версию : BATник с запуском CHKDSK


arrowhead101
21-01-2014, 11:54
Здравствуйте, необходима помощь.

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

Как сделать записать времени включения знаю, вот с выключением сложность, а про аварийное завершение и запуск CHKDSK вообще беда.
Желательно на Win 7.

Заранее благодарю.

Iska
21-01-2014, 16:08
Как сделать записать времени включения знаю, вот с выключением сложность »
Ровно так же, как и со включением — редактор групповой политики:
Политика "Локальный компьютер"
Конфигурация компьютера
Конфигурация программ
Конфигурация Windows
Сценарии (запуск/завершение)

параметры «Автозагрузка»/«Завершение работы».

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

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

arrowhead101
21-01-2014, 17:33
Тоесть, делаем batник
startlog.bat
@echo
Start Win %date% %time% >>C:\log.txt


и finishlog.bat
@echo Finish Win %date% %time% >>C:\log.txt
Start file>C:\start.txt

Как дописать к первому чтобы он проверял на наличие файла и запускал CHKDSK?

Iska
21-01-2014, 18:36
Тоесть, делаем batник
startlog.bat »
On.cmd:
@echo off
setlocal enableextensions enabledelayedexpansion

>>"c:\log.txt" echo %date% %time%

if exist "c:\ForChkDsk.log" (
chkdsk.exe c: /f
) else (
>nul copy /y nul "c:\ForChkDsk.log"
)

endlocal
exit /b 0

и добавляем его в «Автозагрузка» в:
Политика "Локальный компьютер"
Конфигурация компьютера
Конфигурация программ
Конфигурация Windows
Сценарии (запуск/завершение)


и finishlog.bat »
Off.cmd:
@echo off
setlocal enableextensions enabledelayedexpansion

>>"c:\log.txt" echo %date% %time%

if exist "c:\ForChkDsk.log" (
del /f /q "c:\ForChkDsk.log"
)

endlocal
exit /b 0

и добавляем его в «Завершение работы» туда же, в:
Политика "Локальный компьютер"
Конфигурация компьютера
Конфигурация программ
Конфигурация Windows
Сценарии (запуск/завершение)

В реальности же никакого смысла в подобных костылях для chkdsk нет:

механизм определения и управления уже наличествует в ОС;
проверка %SystemDrive% в момент, когда уже загружен интерфейс, бессмысленна; мы получим сообщение об открытых дескрипторах на томе и предложение, наподобие:
Невозможно выполнить команду CHKDSK, так как указанный том используется другим процессом. Следует ли выполнить проверку этого тома при следующей перезагрузке системы? [Y(да)/N(нет)]

arrowhead101
21-01-2014, 21:21
Спасибо большое, дело не в костылях, это задание для учебы)

Iska
21-01-2014, 23:50
arrowhead101, я примерно так и представлял. Тогда можете и «В реальности же никакого смысла…» использовать комментарием к нему.

Iska
22-01-2014, 01:28
Подумалось, что, по-хорошему, надо различать в логе события загрузки и завершения работы. Измените «>>"c:\log.txt" echo %date% %time%», скажем, на:
>>"c:\log.txt" echo %date% %time% Start
и:
>>"c:\log.txt" echo %date% %time% Stop
для «On.cmd» и «Off.cmd» соответственно.




© OSzone.net 2001-2012