中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-02 21:42
48,038 主题排行 / 350,123 发帖 / 今日 1 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » Rob的一些BAT范例[整理:浙北墨伯]
可打印版本  861 / 5
第1楼 mobo 发表于 2006-12-29 08:14
初级用户 发帖 30 积分 73
Rob的一些BAT范例[整理:浙北墨伯]
:::::::::::::by MOBO(x-daode1212)::::::::::::: on 2006-12-26 星期二
:::::::::::::::###########################:::::::::::::::::::::
:::::::::::::::]]]]]]]:::::::::::::::
@ECHO OFF
IF "%OS%"=="Windows_NT" SETLOCAL

:: Version number for this batch file
SET MyVer=1.01

:: Display "about"
ECHO.
ECHO ADSHelp.bat, Version %MyVer% for Windows Server 2003
ECHO Generate an HTML help file for the Directory Service command line tools
ECHO.
ECHO Written by Rob van der Woude
ECHO http://www.robvanderwoude.com
ECHO.

ECHO Writing HTML header . . .
> adshelp.htm ECHO ^<HTML^>
>>adshelp.htm ECHO ^<HEAD^>
:: Read Windows version using VER command
FOR /F "tokens=1 delims=























































http://www.robvanderwoude.com^</A^>^</P^>
>>adshelp.htm ECHO ^</CENTER^>
>>adshelp.htm ECHO.
>>adshelp.htm ECHO ^</BODY^>
>>adshelp.htm ECHO ^</HTML^>

ECHO.
ECHO The following files have been created and stored in the current directory:
DIR /B adshelp.htm ds*_*.txt
ECHO.
ECHO Now starting display of "adshelp.htm" . . .
START "ADSHelp" adshelp.htm

:: End of main batch program
ENDLOCAL
GOTO:EOF


:: Subroutines


ispExec
IF /I NOT "%~1"=="%DSCmd%" (
SET Descr=
SET DSCmd=%~1
SET Lines=1
)
IF %Lines%==0 GOTO:EOF
IF "%~2"=="" (
SET Lines=0
GOTO:EOF
)
FOR /F "tokens=1 delims=." %%C IN ('ECHO.%~2' DO IF DEFINED Descr (SET Descr=%Descr% %%C) ELSE (SET Descr=%%C)
ECHO.%2 | FIND "." >NUL
IF NOT ERRORLEVEL 1 (
FOR /F "tokens=1* delims=:" %%C IN ('ECHO.%Descr%' DO IF NOT "%%D"=="" SET Descr=%%D
SET Lines=0
)
IF %Lines%==0 (
>>adshelp.htm ECHO ^<TR^>
>>adshelp.htm ECHO ^<TD^>^<A HREF="#%DSCmd%"^>%DSCmd%^</A^>^</TD^>
>>adshelp.htm ECHO ^<TD^>^&nbsp;^</TD^>
>>adshelp.htm ECHO ^<TD^>^%Descr%^</TD^>
>>adshelp.htm ECHO ^<TR^>
)
GOTO:EOF


ispHelp
ECHO . . . %~1
>>adshelp.htm ECHO ^<A NAME="%~1"^>
>>adshelp.htm ECHO.
>>adshelp.htm ECHO ^<P^>^&nbsp;^</P^>
>>adshelp.htm ECHO.
>>adshelp.htm ECHO ^<H2^>%~1^</H2^>
>>adshelp.htm ECHO.
>>adshelp.htm ECHO ^<P^>^<PRE^>
>>adshelp.htm %~1 /? 2>NUL
>>adshelp.htm ECHO ^</PRE^>^</P^>
>>adshelp.htm ECHO.
>>adshelp.htm ECHO ^<P^>^&nbsp;^</P^>
>>adshelp.htm ECHO.
IF /I NOT "%~1"=="DSGET" IF /I NOT "%~1"=="DSMOVE" IF /I NOT "%~1"=="DSRM" (
>>adshelp.htm ECHO ^<TABLE BORDER="0"^>
FOR /F "tokens=1* delims=-" %%B IN ('%~1 OU /? 2^>NUL ^| FINDSTR /R /I /B /C:"%~1 * /\? - "' DO CALL ispDetails "%%B" "%%C"
>>adshelp.htm ECHO ^</TABLE^>
)
IF /I "%~1"=="DSGET" (
>>adshelp.htm ECHO ^<TABLE BORDER="0"^>
FOR /F "tokens=1* delims=-" %%B IN ('%~1 OU /? 2^>NUL ^| FINDSTR /R /I /B /C:"%~1 * - "' DO CALL ispDetails "%%B" "%%C"
>>adshelp.htm ECHO ^</TABLE^>
)
>>adshelp.htm ECHO.
>>adshelp.htm ECHO ^<P^>^&nbsp;^</P^>
>>adshelp.htm ECHO.
>>adshelp.htm ECHO ^<A HREF="#Top"^>Back to the top of this page^</A^>
>>adshelp.htm ECHO.
>>adshelp.htm ECHO ^<P^>^&nbsp;^</P^>
>>adshelp.htm ECHO.
GOTO:EOF


ispDetails
>>adshelp.htm ECHO ^<TR^>
FOR /F "tokens=1,2" %%D IN ('ECHO.%~1' DO SET Detail=%%D %%E
ECHO %Detail% . . .
:: Convert Detail string to uppercase
CALL :UpCaseDetail
FOR /F "tokens=1,2" %%D IN ('ECHO.%~1' DO IF "%%E"=="*" (SET URL=%%D_Generic) ELSE (SET URL=%%D_%%E)
>>adshelp.htm ECHO ^<TD^>^<A HREF="%URL%.txt"^>%Detail%^</A^>^</TD^>
>>adshelp.htm ECHO.
>>adshelp.htm ECHO ^<TD^>^&nbsp;^</TD^>
SET Descr=%~2
ECHO.%1 | FIND /I "dsquery *" >NUL
IF ERRORLEVEL 1 (
>>adshelp.htm ECHO ^<TD^>^%Descr%^</TD^>
) ELSE (
CALL sQueryGen
)
>>adshelp.htm ECHO ^</TR^>
> %URL%.txt ECHO.
>>%URL%.txt ECHO.%Detail%
>>%URL%.txt ECHO.
>>%URL%.txt ECHO.
>>%URL%.txt %Detail% /? 2>&1
>>%URL%.txt ECHO.
>>%URL%.txt ECHO.
>>%URL%.txt ECHO.
>>%URL%.txt ECHO Click the Back button or press Backspace to return to main page . . .
>>%URL%.txt ECHO.
GOTO:EOF


sQueryGen
:: DSQUERY * description is displayed on 2 lines, so we need to add an extra line to the description
FOR /F "tokens=1* delims=" %%E IN ('DSQUERY OU /? 2^>NUL ^| FIND /N /V "X@#$X" ^| FIND /I "dsquery * /?"' DO SET LineNum=%%E
SET /A NextLineNum = %LineNum% + 1
FOR /F "tokens=1* delims=" %%E IN ('DSQUERY OU /? 2^>NUL ^| FIND /N /V "X@#$X" ^| FIND ""' DO SET NextLine=%%F
SET Descr=%Descr% %NextLine%
>>adshelp.htm ECHO ^<TD^>^%Descr%^</TD^>
GOTO:EOF


:GetSP
SET SP=
:: Export registry tree to temporary file
START /WAIT REGEDIT.EXE /E "%Temp%.\%~n0.dat" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
IF NOT EXIST "%Temp%.\%~n0.dat" GOTO:EOF
:: Read value of "CSDVersion" from temporary file
FOR /F "tokens=2 delims==" %%A IN ('TYPE "%Temp%.\%~n0.dat" ^| FIND /I "CSDVersion"' DO SET SP=%%~A
:: Check if value is valid
ECHO.%SP% | FIND /I "Service Pack" >NUL
IF ERRORLEVEL 1 SET SP=
DEL "%Temp%.\%~n0.dat"
:: Use a shorter notation
IF DEFINED SP SET SP=%SP:Service Pack=SP%
GOTO:EOF


:UpCaseDetail
SET Detail=%Detail:a=A%
SET Detail=%Detail:b=B%
SET Detail=%Detail:c=C%
SET Detail=%Detail:d=D%
SET Detail=%Detail:e=E%
SET Detail=%Detail:f=F%
SET Detail=%Detail:g=G%
SET Detail=%Detail:h=H%
SET Detail=%Detail:i=I%
SET Detail=%Detail:j=J%
SET Detail=%Detail:k=K%
SET Detail=%Detail:l=L%
SET Detail=%Detail:m=M%
SET Detail=%Detail:n=N%
SET Detail=%Detail=O%
SET Detail=%Detail:p=P%
SET Detail=%Detail:q=Q%
SET Detail=%Detail:r=R%
SET Detail=%Detail:s=S%
SET Detail=%Detail:t=T%
SET Detail=%Detail:u=U%
SET Detail=%Detail:v=V%
SET Detail=%Detail:w=W%
SET Detail=%Detail:x=X%
SET Detail=%Detail:y=Y%
SET Detail=%Detail:z=Z%
GOTO:EOF
:::::::::::::::###########################:::::::::::::::::::::
:::::::::::::::]]]]]]]:::::::::::::::
@ECHO OFF
:: Check for Windows NT 4 or later (though XP or later is required)
IF NOT "%OS%"=="Windows_NT" GOTO Syntax

:: Localize variables
SETLOCAL

:: No command line arguments required
IF NOT "%~1"=="" GOTO Syntax

:: Check if WMIC.EXE is available
WMIC.EXE Alias /?:Brief >NUL 2>&1 || GOTO Syntax

:: Use WMI to retrieve battery status information
FOR /F "tokens=1* delims==" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryStatus Get Charging^,Critical^,Discharging /Format:list ^| FIND "=TRUE"' DO ECHO Battery is %%A
FOR /F "tokens=* delims=" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryStatus Get PowerOnline^,RemainingCapacity /Format:list ^| FIND "="' DO SET Battery.%%A
FOR /F "tokens=* delims=" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryRuntime Get EstimatedRuntime /Format:list ^| FIND "="' DO SET Battery.%%A
FOR /F "tokens=* delims=" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryFullChargedCapacity Get FullChargedCapacity /Format:list ^| FIND "="' DO SET Battery.%%A

:: Calculate runtime left and capacity
SET /A Battery.EstimatedRuntime = ( %Battery.EstimatedRuntime% + 30 ) / 60
SET /A Battery.RemainingCapacity = ( %Battery.RemainingCapacity%00 + %Battery.FullChargedCapacity% / 2 ) / %Battery.FullChargedCapacity%

:: Display results
IF /I "%Battery.PowerOnline%"=="TRUE" (
ECHO Now working on mains power
ECHO Battery %Battery.RemainingCapacity%%% charged
) ELSE (
ECHO Estimated remaining runtime %Battery.EstimatedRuntime% minutes
ECHO Remaining capacity %Battery.RemainingCapacity%%%
)
GOTO:EOF


:Syntax
ECHO.
ECHO BattStat.bat, Version 1.00 for Windows XP Pro or later
ECHO Display current battery status for the local computer
ECHO.
ECHO Usage: BATTSTAT
ECHO.
ECHO Note: Uses WMIC to query the battery status;
ECHO WMIC is native in Windows XP Professional,
ECHO Windows Server 2003 and Windows Vista.
ECHO.
ECHO Written by Rob van der Woude
ECHO http://www.robvanderwoude.com

:: End localization
IF "%OS%"=="Windows_NT" ENDLOCAL
:::::::::::::::###########################:::::::::::::::::::::
:::::::::::::::]]]]]]]:::::::::::::::
@ECHO OFF
ECHO.
ECHO BIOSDate.bat, Version 1.00 for DOS
ECHO Display BIOS date
ECHO.
ECHO Usage: %0
ECHO.
ECHO Written by Rob van der Woude
ECHO http://www.robvanderwoude.com
ECHO.
ECHO Idea by ComputerHope
ECHO http://www.computerhope.com/rdebug.htm

:: Check if running in true DOS mode
ECHO.%COMSPEC%| FIND /I "COMMAND.COM" >NUL
IF ERRORLEVEL 1 GOTO Error

:: Create temporary DEBUG script to read BIOS date
> BIOSDATE.DBG ECHO D FFFF:0005 L 8
>> BIOSDATE.DBG ECHO Q

:: Create temporary batch file to display 8th "word" in a line
> FFFF.BAT ECHO @ECHO OFF
>> FFFF.BAT ECHO SET BIOSDATE=%%8

:: Read BIOS date and store in temporary batch file
ECHO @ECHO OFF> BIOSTEMP.BAT
DEBUG < BIOSDATE.DBG | FIND "/" >> BIOSTEMP.BAT

:: Use temporary batch files to parse output from DEBUG script
CALL BIOSTEMP.BAT

:: Display the result
ECHO.
ECHO BIOS date: %BIOSDATE%

:: Remove temporary files
DEL BIOSTEMP.BAT
DEL BIOSDATE.DBG
DEL FFFF.BAT
GOTO End

:Error
ECHO ERROR: This batch file is meant for DOS only!
ECHO.

:End
:::::::::::::::###########################:::::::::::::::::::::
:::::::::::::::]]]]]]]:::::::::::::::
@ECHO OFF
ECHO.

:: No command line parameters needed:
IF NOT "%1"=="" GOTO Syntax

:: Windows NT only:
VER | FIND "Windows NT" >NUL
IF ERRORLEVEL 1 GOTO Syntax

:: Check if BOOT.INI exists; if it doesn't,
:: display a warning message and quit:
IF NOT EXIST %SystemDrive%\BOOT.INI (ECHO BOOT.INI not found.&ECHO Correct the problem and try again.&GOTO:EOF)

:: Check if backup file exists; if it does,
:: display a warning message and quit:
IF EXIST %SystemDrive%\BOOT.BAK (ECHO Backup of BOOT.INI ^(BOOT.BAK^) already exists.&ECHO Rename it and try again.&GOTO:EOF)

:: Display original file:
ECHO Original BOOT.INI:
ECHO.
TYPE %SystemDrive%\BOOT.INI
ECHO.

:: Remove file attributes:
ATTRIB -H -S -R %SystemDrive%\BOOT.INI
:: Rename BOOT.INI for backup purposes:
REN %SystemDrive%\BOOT.INI *.BAK
:: Read renamed BOOT.INI and write each line to the
:: new BOOT.INI, modifying only the timeout value:
(FOR /F "tokens=1* delims==" %%A IN (%SystemDrive%\BOOT.BAK) DO IF "%%B"=="" (ECHO %%A) ELSE (IF /I "%%A"=="timeout" (ECHO %%A=5) ELSE (ECHO %%A=%%B)))>%SystemDrive%\BOOT.INI
:: Restore the file attributes:
ATTRIB +H +S +R %SystemDrive%\BOOT.INI

:: Display the modifications:
ECHO Modified BOOT.INI:
ECHO.
TYPE %SystemDrive%\BOOT.INI
ECHO.

:: Safety check; if no BOOT.INI exists, restore the backup:
IF NOT EXIST %SystemDrive%\BOOT.INI (ECHO Restoring original BOOT.INI&COPY %SystemDrive%\BOOT.BAK %SystemDrive%\BOOT.INI)

:: End program
GOTO:EOF

:Syntax
ECHO BOOTINI.BAT, Version 1.00 for Windows NT
ECHO Changes BOOT.INI's timeout value to 5 seconds.
ECHO The original BOOT.INI is stored as BOOT.BAK.
ECHO.
ECHO Written by Rob van der Woude
ECHO http://www.robvanderwoude.com
ECHO.
ECHO DISCLAIMER:
ECHO Incorrect changes to BOOT.INI may prevent the system to boot next time.
ECHO Use this tool entirely at your own risk.
ECHO Do not use this tool unless you know how to repair any possible damage.
GOTO:EOF
:::::::::::::::###########################:::::::::::::::::::::
:::::::::::::::]]]]]]]:::::::::::::::
@ECHO OFF
ECHO.

:: No command line parameters needed:
IF NOT "%1"=="" GOTO Syntax

:: Windows NT only:
VER | FIND "Windows NT" >NUL
IF ERRORLEVEL 1 GOTO Syntax

:: Check if BOOT.INI exists; if it doesn't,
:: display a warning message and quit:
IF NOT EXIST %SystemDrive%\BOOT.INI (ECHO BOOT.INI not found.&ECHO Correct the problem and try again.&GOTO:EOF)

:: Check if backup file exists; if it does,
:: display a warning message and quit:
IF EXIST %SystemDrive%\BOOT.BAK (ECHO Backup of BOOT.INI ^(BOOT.BAK^) already exists.&ECHO Rename it and try again.&GOTO:EOF)

:: Display original file:
ECHO Original BOOT.INI:
ECHO.
TYPE %SystemDrive%\BOOT.INI
ECHO.

:: Check if this update has been done before,
:: to prevent adding the switch more than once:
TYPE %SystemDrive%\BOOT.INI | FIND /I " /NoSerialMice" >NUL
:: If the update has been done before, display a message and quit:
IF NOT ERRORLEVEL 1 (ECHO The "/NoSerialMice" switch has been added before.&ECHO Aborting...&GOTO End)

:: Remove file attributes:
ATTRIB -H -S -R %SystemDrive%\BOOT.INI
:: Rename BOOT.INI for backup purposes:
REN %SystemDrive%\BOOT.INI *.BAK
:: Read renamed BOOT.INI and write each line to the
:: new BOOT.INI, only adding the /NoSerialMice value:
(FOR /F "tokens=1* delims==" %%A IN (%SystemDrive%\BOOT.BAK) DO (
IF "%%B"=="" (
ECHO %%A
) ELSE (
ECHO.%%A | FIND "partition" >NUL
IF ERRORLEVEL 1 (
ECHO %%A=%%B
) ELSE (
ECHO %%A=%%B /NoSerialMice
)
)
))>%SystemDrive%\BOOT.INI

:: Restore the file attributes:
ATTRIB +H +S +R %SystemDrive%\BOOT.INI

:: Display the modifications:
ECHO Modified BOOT.INI:
ECHO.
TYPE %SystemDrive%\BOOT.INI
ECHO.

:: Safety c
第2楼 namejm 发表于 2006-12-29 08:16
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  建议代码用 [code] 和 [/code] 括起来,以防论坛把一些符号转换为表情,同时也方便别人复制代码。
第3楼 vkill 发表于 2006-12-29 08:20
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
怎么说明没啊~看的很累
第4楼 mobo 发表于 2006-12-29 08:27
初级用户 发帖 30 积分 73
二三楼说得极是!
一,粗心大意了,没用 括起来,
二,没空为老外的东东写中文注释,觊觎着有小姐来写点注释!
三,还有很多,下次再上传了,bye
-------------墨伯
第5楼 vkill 发表于 2006-12-29 08:33
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
我大概看了下,老外为什么不用find ... && ||那?还用IF NOT ERRORLEVEL 1,不解
第6楼 mobo 发表于 2007-01-01 02:40
初级用户 发帖 30 积分 73
常常要判断出错与否
IF NOT ERRORLEVEL 1---即不发生错误的话
不同的错误标号有不同的意思的,有点像黑话
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023