Windows批处理 - 磁盘检查并保存日志

Posted EZhex1991

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows批处理 - 磁盘检查并保存日志相关的知识,希望对你有一定的参考价值。

在Windows的磁盘选项中,会有磁盘检查的按钮,本文章中代码的作用与其无差。但是用过系统自带的检查功能的应该都有这样的体会:

  1. 我点了取消怎么还在检查?
  2. 怎么这么慢,这个百分比不对啊?
  3. 我挂机检查,结束后连个结果都看不到?

这里用bat程序进行磁盘检查就可以解决上述问题。在磁盘检查的过程中,我们需要随时退出,需要能够随时看到进度,并且在挂机检查完成后能够看到结果,所以我们必须使用批处理,将日志输出到文件中。

先上代码:

CheckDisk.bat

@echo off
setlocal enabledelayedexpansion

set /p vol=please enter the Drive Letter (default for C):

call "DateTime.bat"
set log=".\\Log\\!vol! !DateTime!.xls"
mkdir ".\\Log\\"
echo.>!log!

echo start time: %date% %time%>>!log!
echo.
echo.
echo checking in progress, please don't close...
echo you can check process by viewing file: !log!.

start "LogViewer" LogViewer.bat !log!

chkdsk !vol!: /f /v /x>>!log!

echo end time: %date% %time%>>!log!

echo.
echo.
echo Complete^^! Log file: !log!.

pause

DateTime.bat

::%Year%, %Month%, %Day%, %Hour%, %Minute%, %Second%, %Millisecond%
::%DateTime% is a number generated by concatenating all the variables above (16 figures)


reg copy "HKEY_CURRENT_USER\\Control Panel\\International" "HKEY_CURRENT_USER\\Control Panel\\InternationalCopy" /f>nul

reg add "HKEY_CURRENT_USER\\Control Panel\\International" /v sLongDate /t REG_SZ /d yyyy/MM/dd /f>nul
reg add "HKEY_CURRENT_USER\\Control Panel\\International" /v sShortDate /t REG_SZ /d yyyy/MM/dd /f>nul
reg add "HKEY_CURRENT_USER\\Control Panel\\International" /v sShortTime /t REG_SZ /d HH:mm:ss /f>nul
reg add "HKEY_CURRENT_USER\\Control Panel\\International" /v sTimeFormat /t REG_SZ /d HH:mm:ss /f>nul

set Year=%date:~0,4%
set Month=%date:~5,2%
set Day=%date:~8,2%

set Hour=%time:~0,2%
set Minute=%time:~3,2%
set Second=%time:~6,2%
set Millisecond=%time:~9,2%

set DateTime=%Year%%Month%%Day%%Hour%%Minute%%Second%%Millisecond%

reg copy "HKEY_CURRENT_USER\\Control Panel\\InternationalCopy" "HKEY_CURRENT_USER\\Control Panel\\International" /f>nul
reg delete "HKEY_CURRENT_USER\\Control Panel\\InternationalCopy" /f>nul

LogViewer.bat

@echo off
setlocal enabledelayedexpansion

:loop
    echo.
    echo ----------------------------------------------------------
    echo press anykey to check current process...
    echo %~f1
    pause>nul
    type "%~f1"
goto loop
  • 程序运行会首先要求你输入需要检查的磁盘驱动器号,如果不输入则会检查当前的系统盘(不过系统盘的检查不会直接进行,会要求你确认是否下次启动时进行)。
  • 然后调用“DateTime.bat”获取当前的时间(之前的文章中有详细讲解),在当前的文件夹下建立“Log”文件夹,里面存放检查的日志文件。日志文件以“驱动器号 检查时间.xls”进行命名(用xls后缀是方便用Excel打开,实际上就是普通文本文件)
  • 然后在日志文件中记录开始运行的时间,输出一些提示语句。
  • 因为在运行过程中是一直在向日志文件写入的,所以查看进度需要重复打开当前文件,为了方便就Start了一个“LogViewer.bat”窗口,输入任意键就会读取当前的日志文件内容并输出。
  • 然后检查开始chkdsk C: /f /v /x>>!log!,参数可用chkdsk /?查询,我就不细说了。
  • 结束之后把结束时间也写到日志文件。然后输出日志文件的路径。

运行完成是这样的(在LogViewer窗口我输出了一次日志)

如果你是挂机运行的,这两个窗口会保留,当然你也可以直接查看日志文件。

这样如果需要评估某个硬盘的运行状态,你只需要运行后等结果就可以了。

以上是关于Windows批处理 - 磁盘检查并保存日志的主要内容,如果未能解决你的问题,请参考以下文章

windows10开机的时候没有运行任何软件磁盘就占用100%并出现卡顿、假死无反应怎么办吗?

基本的http文件在python中下载并保存到磁盘?

windows 2008 R2+SQL 2008 R2 集群故障处理

如何检查Oracle的归档空间是不是满了

Linux日志式文件系统面面观

fdisk新建磁盘分区