标题: Rob的一些BAT范例[整理:浙北墨伯]
[打印本页]
作者: mobo
时间: 2006-12-29 08:14
标题: 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
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=[" %%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"^>
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^>^ ^</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
http://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
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
:::::::::::::::###########################:::::::::::::::::::::
:::::::::::::::[[[[[[[[ 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© %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
:::::::::::::::###########################:::::::::::::::::::::
:::::::::::::::[[[[[[[[ 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
作者: namejm
时间: 2006-12-29 08:16
建议代码用 [code] 和 [/code] 括起来,以防论坛把一些符号转换为表情,同时也方便别人复制代码。
作者: vkill
时间: 2006-12-29 08:20
怎么说明没啊~看的很累
作者: mobo
时间: 2006-12-29 08:27
标题: 二三楼说得极是!
一,粗心大意了,没用
和
括起来,
二,没空为老外的东东写中文注释,觊觎着有小姐来写点注释!
三,还有很多,下次再上传了,bye
-------------墨伯
作者: vkill
时间: 2006-12-29 08:33
我大概看了下,老外为什么不用find ... && ||那?还用IF NOT ERRORLEVEL 1,不解
作者: mobo
时间: 2007-1-1 02:40
标题: 常常要判断出错与否
IF NOT ERRORLEVEL 1---即不发生错误的话
不同的错误标号有不同的意思的,有点像黑话