![]() |
中国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 ispExecIF /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=%%DSET Lines=0 ) IF %Lines%==0 ( >>adshelp.htm ECHO ^<TR^> >>adshelp.htm ECHO ^<TD^>^<A HREF="#%DSCmd%"^>%DSCmd%^</A^>^</TD^> >>adshelp.htm ECHO ^<TD^>^ ^</TD^> >>adshelp.htm ECHO ^<TD^>^%Descr%^</TD^> >>adshelp.htm ECHO ^<TR^> ) GOTO:EOF ispHelpECHO . . . %~1 >>adshelp.htm ECHO ^<A NAME="%~1"^> >>adshelp.htm ECHO. >>adshelp.htm ECHO ^<P^>^ ^</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^>^ ^</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^>^ ^</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^>^ ^</P^> >>adshelp.htm ECHO. GOTO:EOF ispDetails>>adshelp.htm ECHO ^<TR^> FOR /F "tokens=1,2" %%D IN ('ECHO.%~1' DO SET Detail=%%D %%EECHO %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^>^ ^</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=%%ESET /A NextLineNum = %LineNum% + 1 FOR /F "tokens=1* delims=" %%E IN ('DSQUERY OU /? 2^>NUL ^| FIND /N /V "X@#$X" ^| FIND ""' DO SET NextLine=%%FSET 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 %%AFOR /F "tokens=* delims=" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryStatus Get PowerOnline^,RemainingCapacity /Format:list ^| FIND "="' DO SET Battery.%%AFOR /F "tokens=* delims=" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryRuntime Get EstimatedRuntime /Format:list ^| FIND "="' DO SET Battery.%%AFOR /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© %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 |