中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » Rob的一些BAT范例[整理:浙北墨伯]
作者:
标题: Rob的一些BAT范例[整理:浙北墨伯] 上一主题 | 下一主题
mobo
初级用户





积分 73
发帖 30
注册 2006-9-18
状态 离线
『楼 主』:  Rob的一些BAT范例[整理:浙北墨伯]

:::::::::::::by MOBO(x-daode1212)::::::::::::: on 2006-12-26 星期二 :::::::::::::::###########################::::::::::::::::::::: :::::::::::::::[[[[[[[[ adshelp.bat ]]]]]]]]::::::::::::::: @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 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=[" %%A IN ('VER') DO SET Ver=%%A FOR /F "tokens=1* delims= " %%A IN ('ECHO.%Ver%') DO SET Ver=%%B :: Read latest Service Pack from registry CALL :GetSP >>adshelp.htm ECHO ^<TITLE^>Help for Directory Service command line tools^</TITLE^> >>adshelp.htm ECHO ^<META NAME="generator" CONTENT="ADSHelp.bat, Version %MyVer%, by Rob van der Woude"^> >>adshelp.htm ECHO ^</HEAD^> >>adshelp.htm ECHO. >>adshelp.htm ECHO ^<BODY^> >>adshelp.htm ECHO. >>adshelp.htm ECHO ^<A NAME="Top"^> >>adshelp.htm ECHO. >>adshelp.htm ECHO ^<CENTER^> >>adshelp.htm ECHO ^<H2^>Help for^</H2^> >>adshelp.htm ECHO ^<H1^>Directory Service command line tools^</H1^> :: >>adshelp.htm ECHO ^<H2^>%Ver%%SP%^</H2^> >>adshelp.htm ECHO ^<H2^>Windows Server 2003 %SP%^</H2^> FOR /F "tokens=* delims=" %%A IN ('VER') DO SET Ver=%%A >>adshelp.htm ECHO ^<H3^>%Ver%^</H3^> >>adshelp.htm ECHO ^</CENTER^> >>adshelp.htm ECHO. >>adshelp.htm ECHO ^<P^>^ ^</P^> >>adshelp.htm ECHO. ECHO Creating command index table . . . SET FirstCell=1 >>adshelp.htm ECHO ^<TABLE BORDER="0"^> SET Lines=1 SET DSCmd= FOR %%A IN (DSADD DSGET DSMOD DSMOVE DSQUERY DSRM) DO FOR /F "tokens=* delims=" %%B IN ('%%A /? 2^>^&1 ^| FIND /V "/?"') DO CALL ispExec "%%A" "%%B" 2>NUL >>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. ECHO Creating help for individual commands . . . FOR %%A IN (DSADD DSGET DSMOD DSMOVE DSQUERY DSRM) DO CALL ispHelp %%A ECHO Closing HTML file . . . >>adshelp.htm ECHO. >>adshelp.htm ECHO ^<CENTER^> >>adshelp.htm ECHO. >>adshelp.htm ECHO ^<P^>More detailed descriptions on Microsoft's Windows Server 2003 Directory Service command line tools can be found >>adshelp.htm ECHO ^<A HREF="http://www.microsoft.com/windowsxp/home/using/productdoc/en/default.asp?url=/windowsxp/home/using/productdoc/en/DS_command_line_tools.asp" TARGET="_blank"^>here^</A^>^</P^> >>adshelp.htm ECHO. >>adshelp.htm ECHO ^<P^>^ ^</P^> >>adshelp.htm ECHO. >>adshelp.htm ECHO ^<P^>This HTML help file and the associated text files were generated by:^<BR^> >>adshelp.htm ECHO ^<B^>ADSHelp.bat^</B^>, Version %MyVer% >>adshelp.htm ECHO for Windows 2003 Server^<BR^> >>adshelp.htm ECHO Written by Rob van der Woude^<BR^> >>adshelp.htm ECHO ^<A HREF="http://www.robvanderwoude.com"^>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^>^ ^</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^>^ ^</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 %%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^>^ ^</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 "[%NextLineNum%]"') 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 :::::::::::::::###########################::::::::::::::::::::: :::::::::::::::[[[[[[[[ battstat_xp.bat ]]]]]]]]::::::::::::::: @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 www.robvanderwoude.com :: End localization IF "%OS%"=="Windows_NT" ENDLOCAL :::::::::::::::###########################::::::::::::::::::::: :::::::::::::::[[[[[[[[ biosdate_dos.bat ]]]]]]]]::::::::::::::: @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 www.robvanderwoude.com ECHO. ECHO Idea by ComputerHope ECHO 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 :::::::::::::::###########################::::::::::::::::::::: :::::::::::::::[[[[[[[[ bootini.bat ]]]]]]]]::::::::::::::: @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 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 :::::::::::::::###########################::::::::::::::::::::: :::::::::::::::[[[[[[[[ bootini2.bat ]]]]]]]]::::::::::::::: @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


2006-12-29 08:14
查看资料  发短消息  网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  建议代码用 [code] 和 [/code] 括起来,以防论坛把一些符号转换为表情,同时也方便别人复制代码。




尺有所短,寸有所长,学好CMD没商量。 考虑问题复杂化,解决问题简洁化。
2006-12-29 08:16
查看资料  发短消息  网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 3 楼』:  

怎么说明没啊~看的很累


2006-12-29 08:20
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
mobo
初级用户





积分 73
发帖 30
注册 2006-9-18
状态 离线
『第 4 楼』:  二三楼说得极是!

一,粗心大意了,没用
括起来, 二,没空为老外的东东写中文注释,觊觎着有小姐来写点注释! 三,还有很多,下次再上传了,bye -------------墨伯


2006-12-29 08:27
查看资料  发短消息  网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 5 楼』:  

我大概看了下,老外为什么不用find ... && ||那?还用IF NOT ERRORLEVEL 1,不解


2006-12-29 08:33
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
mobo
初级用户





积分 73
发帖 30
注册 2006-9-18
状态 离线
『第 6 楼』:  常常要判断出错与否

IF NOT ERRORLEVEL 1---即不发生错误的话 不同的错误标号有不同的意思的,有点像黑话


2007-1-1 02:40
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: