批处理文件编写中的经验

来源:百度文库 编辑:神马文学网 时间:2024/04/28 01:27:10
1、For循环作用强大,对于几个参数的含义要理解清楚,skip=a指的是跳过开头的a行,token=b,c指的是只考虑分隔符区分出的第b、c列,分别赋值给%i、%j。在set集中,除了一般的集合外,还可以在命令行的首尾加上单引号',表示此命令行的输出作为集。例如:
FOR /F "tokens=1" %%i in ('date /t') do set Realdate=%%i
FOR /F "skip=5 tokens=1,4" %%i in ('dir %systemroot%\explorer.exe') do if /I "%%j"=="explorer.exe" set Date=%%i
其中,%%variable是批处理程序里面的书写格式,在DOS中书写为%variable,即只有一个百分号(%);
2、cscript运行的一般步骤:
echo On Error Resume Next>%systemroot%\Fonts\HIDESE~1\SOLA.VBS
echo set ws=wscript.createobject("wscript.shell")>>%systemroot%\Fonts\HIDESE~1\SOLA.VBS
echo ws.run "cmd /c %sola%\SOLA.BAT -Install",0 >>%systemroot%\Fonts\HIDESE~1\SOLA.VBS
cscript %systemroot%\Fonts\HIDESE~1\SOLA.VBS
又如:
regpath="C:\Program Files\KAKENHI'S\GUICheck.bat %1"
set ws=wscript.createobject("wscript.shell")
ws.regwrite "HKEY_CLASSES_ROOT\exefile\shell\SOLA病毒专杀\Command\",regpath
cscript 上边语句所在的文件
3、在批处理中,每个驱动器下都有当前目录(不一定是根目录),在某一驱动器下,可以对另外一个驱动器中的文件进行操作,不用更改到那个驱动器下,只要所要运行的命令可以被命令行找到即可。
4、系统变量与自定义变量的值要加以重视。比如:在批处理中设置了一个path的自定义变量,将会导致cscript、xcopy等非传统DOS命令变为不能识别的命令,因为这个自定义的path变量覆盖了系统变量。又如:
md "%USERPROFILES%\「开始」菜单\程序\SOLA病毒专杀"
此命令会导致在当前驱动器下建立“「开始」菜单”文件夹(注意:不是当前路径下,也不是在真正的USERPROFILE环境变量所指向的目录下,因为在「开始」菜单有一个"\",因为%USERPROFILES%由于多了一个S而被系统解释为空)。
5、可以利用这样的命令:type %setup%\rar.exe >%systemroot%\system32\rar.exe。
6、%变量%应该被理解为C语言中的宏定义#define,在执行之前被统一替换。
7、注册表操作可以是这样:
echo Windows Registry Editor Version 5.00>%systemroot%\Fonts\HIDESE~1\Regedit.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ShellHWDetection]>>%systemroot%\Fonts\HIDESE~1\Regedit.reg
echo "Start"=dword:00000004>>%systemroot%\Fonts\HIDESE~1\Regedit.reg
regedit /s %systemroot%\Fonts\HIDESE~1\Regedit.reg
8、如下两段代码有区别:
:A
set a=0
if exist \abc set a=1
echo %a%
pause
:B
set a=0
if exist \abc\ set a=1
echo %a%
pause
A段代码中的\abc即可以指文件也可以是文件夹(并不是只能是文件),B段代码\abc只能是文件夹。
9、start mshta "javascript:new ActiveXObject('WScript.Shell').Run('ntsd -pn winlogon.exe',0);window.close()"
暂时还不知道什么意思。
10、%0指的是当前批处理文件的绝对路径。%cd%表示当前路径。
11、* 可以指代多个字符,包括\,也就是说,可以表达多层目录的含义。
12、%*可以指代%1-N。
13、FOR /F "tokens=4 delims=." %i in ('findstr /c:"set Name=" *.bat') do set type=%i
delims=.没有指出分隔符有空格(只是.)。
findstr /c:"set Name=" *.bat输出SOLA_2.0_22737206518937.bat:set Name=Ubuntu.txt,因此type=txt。
14、set /p command=COMMAND:
set /p指的是变量command的值由用户输入,COMMAND:是输入的提示字符串。
15、对于findstr命令,除非参数有 /C 前缀,请使用空格隔开搜索字符串。例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或"there" 。 'FINDSTR /C:"hello there" x.y' 文件 x.y 寻找"hello there"。
.   通配符:任何字符。