无忧启动论坛

标题: 那位老师有些批处理的实例能否贴出来让偶等小鸟学习学习! [打印本页]

作者: 鹤冲天    时间: 2006-11-26 20:52
标题: 那位老师有些批处理的实例能否贴出来让偶等小鸟学习学习!
希望能先看到一些相对简单点的,在网上搜的都看不到明白!
如果能有注解那就太感谢了!
作者: namejm    时间: 2006-11-26 22:19
  先传一个没有注释的东西上来——每个都注释的话,确实比较烦琐,而手动测试几次之后,基本上都能明白是怎么回事的。若确实有需要注释的,请跟帖标明文件名。

DOS实例练习.rar

86.44 KB, 下载次数: 1045, 下载积分: 无忧币 -2


作者: 鹤冲天    时间: 2006-11-27 09:57
谢谢!谢谢!
不敢奢望都有注解!
有例子我就十分感谢了!!
感谢namejm 老师!感谢无优!!
作者: ccwan    时间: 2006-11-27 16:38
嗨!namejm 兄要给你写注释居然不要,笨啊!
有此高手帮助,获益良多。
作者: jkqs    时间: 2006-11-27 20:59
谢谢,收下载来琢磨琢磨!
作者: taoty    时间: 2006-11-27 23:38
正在学习批处理,可入门比较困难,收一个下来仔细研究一下。
作者: nsjn    时间: 2006-11-28 02:14
不错,支持!
作者: freeapple    时间: 2006-11-28 12:27
向批处理进军ing
作者: 鹤冲天    时间: 2006-11-29 22:29
偶的DOS基础真是有一点点弱!(暴汗!)
看3。BAT晕的有点喘不上气儿了!爬上来透口气儿!
set /a kk+=1   
这句最终自己也不能确定!希望namejm老师能帮忙解释下!
自己是这样理解的,设置KK为环境变量,最终结果是=1,现在是零??晕了!!越看帮助越晕!
ping 1.1.1.1 -n 2 -w 300>nul
ping这个IP,指定2次延时300毫秒无任何输出
换句话说就是延时600毫秒执行下一句
if "%kk%"="1" goto 11
如果变量KK=1那么跳转到11
下同
就这水平了,namejm老师多费心了!我这给您鞠躬了!
作者: namejm    时间: 2006-11-29 23:34
  set /a kk+=1是 set kk=%kk%+1 的缩写形式,也就是累加1的意思。如果最开始没有设置kk的值,用第一次用 set /a 来操作 kk 的时候,默认 kk 的值为0,当执行到 :55 的时候,set kk= 一句会把变量的值清空,第一次碰到 set /a 语句的时候,又会把 kk 的值重新设置为默认的0。
作者: 鹤冲天    时间: 2006-12-2 01:49
22.bat
if #%ii%==#10 goto yy
这两个#号是什么意思?
去掉效果是一样的啊!(至少看到的效果是一样的)
在有我现在看到%这个符号都哆嗦!怎么那里都用啊!那个和那个也不一样!!??
88.bat特意强调了不一样?
echo %~f0
echo %%~dp0
:这是显示%~dp0这个字符,看好了%的个数
%
%%
%ii%
该怎么理解它们?
作者: namejm    时间: 2006-12-2 07:28
  关于两个#号:这样做是防止出现空字符串。假设没有#号的话,一旦 %ii% 的值为空,则 ==左侧为空,那么,这个if语句就要出错,导致脚本自动退出。

  echo %~f0 用在CMD命令行中,echo %%~f0 用在批处理文件中,这个是 for 语句的一个规定,请看 for 的帮助信息:

  1. 对一组文件中的每一个文件执行某个特定命令。

  2. FOR %variable IN (set) DO command [command-parameters]

  3.   %variable  指定一个单一字母可替换的参数。
  4.   (set)      指定一个或一组文件。可以使用通配符。
  5.   command    指定对每个文件执行的命令。
  6.   command-parameters
  7.              为特定命令指定参数或命令行开关。

  8. 在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
  9. 而不要用 %variable。……
复制代码

  百分号对之间夹字符串,表示是对该变量的引用,在变量延迟的时候,百分号对要换成感叹号对。
作者: xiayejin    时间: 2006-12-2 21:22
冒昧的问一句,dos7.1不能这样用set /a kk+=1吧?
作者: namejm    时间: 2006-12-2 21:26
  对纯DOS不熟悉,纯DOS下似乎不支持 set 命令的 /a 参数。
作者: 鹤冲天    时间: 2006-12-4 11:02
for的帮助我看了,这还算能理解!
主要是88.bat
@echo off
echo %~f0
echo @echo off
echo %~f0
echo %%~dp0
:这是显示%~dp0这个字符,看好了%的个数
这我就有点晕了,%~dp0 是显示当前批处理所在路径(试验知道的)为啥在+个%就不执行了,而只是个字符了呢??这有帮助吗?我应该怎么得到这些信息??
作者: namejm    时间: 2006-12-4 13:03
  这个变量扩展是由 for 语句的规则派生出来的。
作者: 鹤冲天    时间: 2006-12-4 17:50
不是很理解!算了不理解了,楞记吧!!知道也就算了!
能帮忙解释下%~dp0,这是从那里来的??有多少这样的变量(应该是叫变量吧??)?
都是作什么用的??(我知道可能会很多,但,我如何才能学习到这些知识呢??)
这些都是从实战中揣摩出来的?还是有文字的资料可以了解??
作者: 鹤冲天    时间: 2006-12-4 23:19
33.bat看不懂!这是要做什么的??
@echo off
cls
set /p ii=Enter file full path :
set /p uu=Enter you will find strings:
find /n "%uu%" %ii% >bagpipe.txt
for /f "eol=- tokens=1 delims=[]" %%i in (bagpipe.txt) do @echo %%i
del bagpipe.txt
pause
作者: 鹤冲天    时间: 2006-12-6 17:47
FOR语句看的好累
33。bat

@echo off
cls
set /p ii=Enter file full path :输入文件路径
set /p uu=Enter you will find strings:输入字符串
find /n "%uu%" %ii% >bagpipe.txt ::在文件中搜索字符串并显示行号
for /f "eol=- tokens=1 delims=[]" %%i in (bagpipe.txt) do @echo %%i
for语句就晕了,eol=-(忽略-开头的这行??)(那帮助中的eol=c           - 指一个行注释字符的结尾(就一个)是什么意思?)
tokens=1(第一个传递给for??)
那delims=[]应该怎么解释?我看它是最晕的,有它在输出不显示[],没它显示!那它到底是做什么的??这话应该怎么说??帮助说的是delims=xxx      - 指分隔符集。这个替换了空格和跳格键的 默认分隔符集。
del bagpipe.txt
pause

俺DOS基础实在是弱!郁闷!!
希望namejm老师表嫌俺笨啊!能在百忙之中抽点时间给指导指导!
谢谢,谢谢啦!!
作者: namejm    时间: 2006-12-6 18:06
Re 17#

  %~dp0 还是 for 语句的变量扩展的组合形式,其中,%0 是"形参",表示批处理文件本身,类似的还有%1~%9,一般用在 call 语句中。请看 for 的变量扩展描述:

  1. 另外,FOR 变量参照的替换已被增强。您现在可以使用下列
  2. 选项语法:

  3.      ~I         - 删除任何引号("),扩充 %I
  4.      %~fI        - 将 %I 扩充到一个完全合格的路径名
  5.      %~dI        - 仅将 %I 扩充到一个驱动器号
  6.      %~pI        - 仅将 %I 扩充到一个路径
  7.      %~nI        - 仅将 %I 扩充到一个文件名
  8.      %~xI        - 仅将 %I 扩充到一个文件扩展名
  9.      %~sI        - 扩充的路径只含有短名
  10.      %~aI        - 将 %I 扩充到文件的文件属性
  11.      %~tI        - 将 %I 扩充到文件的日期/时间
  12.      %~zI        - 将 %I 扩充到文件的大小
  13.      %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩充
  14.                    到找到的第一个完全合格的名称。如果环境变量名
  15.                    未被定义,或者没有找到文件,此组合键会扩充到
  16.                    空字符串

  17. 可以组合修饰符来得到多重结果:

  18.      %~dpI       - 仅将 %I 扩充到一个驱动器号和路径
  19.      %~nxI       - 仅将 %I 扩充到一个文件名和扩展名
  20.      %~fsI       - 仅将 %I 扩充到一个带有短名的完整路径名
  21.      %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
  22.                    到找到的第一个驱动器号和路径。
  23.      %~ftzaI     - 将 %I 扩充到类似输出线路的 DIR
复制代码


Re 19#

  for 语句功能十分强大,若能把它研究透,离高手也就不远了。但是非常不幸,MS自家的帮助信息居然有不少错误的表述,估计是哪位E文没学好的家伙翻译过来的。

  eol=- 实际上是忽略以 - 开头的行;delims= 表示以等号后面的符号为分隔符来提取文本信息,提取的时候,因为这些符号是做了分隔符的,所以提取出来的信息中是不会含有这些符号的,除非使用 tokens=1* 之类带星号的格式来提取;当 delims= 后只有一个符号的时候,还很容易理解,如果有多个符号的话,情况就变得十分复杂了,由于本人平时只注重使用,而不善于归纳总结,对这种情况也没多少可说的,只能建议你变换条件来反复测试。
作者: 鹤冲天    时间: 2006-12-6 20:30
原帖由 namejm 于 2006-12-6 06:06 PM 发表
  %~dp0 还是 for 语句的变量扩展的组合形式,其中,%0 是"形参",表示批处理文件本身,

哦,我说呢!原来%0是这个意思,我说我对这那该死的表怎么也找不到 %~dp0 在那啊!原来是这样!
MS的帮助真是让人受不了!!看了MS的帮助我想死的心都有!!NND,eol=c           - 指一个行注释字符的结尾(就一个)这句我怎么看也看不明白,敢情儿不是我理解能力不行,是MS误人啊!!
在这再次感谢namejm老师!谢谢,谢谢您无私的帮助!!向您致敬!!
作者: mackyliu    时间: 2006-12-7 10:20
想问一个namajm老师,批处理有没有办法将自身某一块或N块的内容输出为某一个文件?

例如本身批处理中有一个:start的块,如何将这块的内容用>>1.txt的方式输出成一个文件咧?
作者: namejm    时间: 2006-12-7 12:35
  在特定条件下,批处理能将自身某一块或某N块的内容输出为某一文件,这些条件有(满足其中一条即可):

  1、信息块本身有CMD能处理的起止标记;
  2、信息块位于文件中某些特定的行;

  以下是一些演示代码:

  1. @echo off
  2. :: 把以 :start 开始,goto :eof之前的信息段输出到test.txt
  3. cd.>test.txt
  4. set switch=1
  5. for /f "delims=" %%i in ('findstr .* "%~0"') do (
  6.     if /i "%%i"==":start" set switch=
  7.     if /i "%%i"=="goto :eof" set switch=1
  8.     if not defined switch >>test.txt echo.%%i
  9. )
  10. start test.txt
  11. exit

  12. :start
  13. @echo off
  14. echo hello world
  15. pause>nul
  16. goto :eof

  17. :end
  18. exit
复制代码

  1. @echo off
  2. :: 把 :start 标签段的信息段输出到test.txt(忽略空行)
  3. cd.>test.txt
  4. set num=0
  5. setlocal enabledelayedexpansion
  6. for /f "delims=" %%i in ('findstr .* "%~0"') do (
  7.     set /a num+=1
  8.     if !num! gtr 12 if !num! lss 17 >>test.txt echo.%%i
  9. )
  10. start test.txt
  11. exit

  12. :start
  13. @echo off

  14. echo hello world
  15. pause>nul
  16. goto :eof

  17. :end
  18. exit
复制代码

  1. @echo off
  2. :: 将 :start 之后的所有内容输出到 test.txt
  3. >test.txt more +7 "%~0"
  4. start test.txt
  5. goto :eof

  6. :start
  7. @echo off
  8. echo hello world
  9. pause>nul

  10. :next
  11. @echo off
  12. echo hell bbs.wuyou.net
  13. pause>nul
复制代码

[ 本帖最后由 namejm 于 2006-12-7 10:56 PM 编辑 ]
作者: mackyliu    时间: 2006-12-7 21:22
多谢namejm老师,敬个礼。
作者: 鹤冲天    时间: 2006-12-10 14:53
address.bat
@echo off
for /f "delims=: tokens=2" %%i in ('"dir /-c|find /i "winnt""') do echo %%i
for /f "delims=: tokens=2" %%i in ('"ipconfig|find /i "ip address""') do echo %%i
pause

开始这个‘’号和最后这个“”号,应该如何解释??我在作笔记,写到这里我不知道该如何表达!!?!
作者: namejm    时间: 2006-12-10 17:10
  for /f %%i in (set) do (command) 语句表示在最终对象为文本内容的时候进行循环,该语句有三种基本类型,各种类型的适用情况如下:

  ① 当 set 为文件名时,用 for /f %%i in (filename) do (command);
  ② 当 set 为字符串时,用双引号把字符串括起来:for /f %%i in ("string") do (command);
  ③ 当 set 为命令语句时,用单引号把命令语句括起来: for /f %%i in ('command1') do (command2);

  第3种情况下,如果 set 内用到了管道符号,则一般在管道符号前用转义符号^来连接前后语句,如 for /f "delims=: tokens=2" %%i in ('ipconfig^|find /i "ip address"') do echo %%i ;如果不使用转义符号^,则把管道符号前后语句都用双引号括起来,再在最外层使用单引号,也就变成了 for /f "delims=: tokens=2" %%i in ('"ipconfig|find /i "ip address""') do echo %%i 这样的语句。
作者: 鹤冲天    时间: 2006-12-11 22:47
echo %~dp0 >2.bat
echo %%~dp0 >>2.bat
这里的>和>>有什么区别?
作者: namejm    时间: 2006-12-11 23:34
  > 表示用执行结果覆盖目标文件,>> 表示把执行结果追加到目标文件。
作者: SPKEEY    时间: 2006-12-11 23:42
跟着看了一下。觉得编译个bat。还不如写个程序,只要知道一行批处理:
调用它。
**。exe  ** ** ** **
作者: namejm    时间: 2006-12-12 10:14
  批处理无须编译,直接保存为cmd格式或bat格式就可以跑起来,SPKEEY 兄误解了。
作者: wogan    时间: 2006-12-12 10:57
太厉害了,这样的细节很少有资料说到
作者: wogan    时间: 2006-12-12 11:14
请问一下有些变量使用是%i有些却是%i%或!i!,有什么区别吗?

for /f %%a in (说明.txt) do echo %%a此句在批处理中执行正确,而在命令行下却提示”此时不应有 %%a。“
改为for /f %a in (说明.txt) do echo %a在命令行下正确执行为何?
作者: namejm    时间: 2006-12-12 11:29
  如果用在批处理文件中,for 语句中的 %%a 要用两个百分号,在CMD命令行中只能用一个百分号,这是for语句的一个规定。
作者: 鹤冲天    时间: 2006-12-15 21:40
echo.
echo:
echo;
我在测试中看到的都是空一行!
他们具体的含义是什么啊?还有其他用法吗?
对了,namejm老师如果有机会到石家庄一定通知我啊!让我有机会略进地主之仪表表心仪!!
作者: namejm    时间: 2006-12-16 00:00
  如果它们后面不跟任何字符的话,它们的作用就是产生一个空行。在排版的时候非常有用。

  另外,它们的使用还有些技巧。比如在批处理中,假设你要在屏幕上显示一个变量的值的话,按照一般的写法,写成 echo %var%,如果这个变量恰好是个空值的话,就会显示当前 echo 的状态,而不是一个空值。为了回避这个干扰信息,可以写成 echo.%var% 的形式(注意:一定要连着写,中间不带任何空格),或者 echo:%var%,或者 echo;%var%,则碰到空值的时候,会自动空一行;碰到有内容的时候,会正确显示内容而不会产生多余的空行。

  感谢你的盛情邀请,有机会到石家庄的话,我一定去骚扰你^_^。若你有机会来成都的话,也别忘了和我联系:)
作者: 鹤冲天    时间: 2006-12-18 11:50
bag.bat
@echo off
setlocal enabledelayedexpansion
set mm=%1
set /p start=输入每行开头要添加的字符串:
set /p end=输入每行结为要添加的字符串:
for /f "tokens=1,2* delims=:" %%i in ('findstr /n . %mm%') do echo ^!start^!%%j^!end^! >>22.txt
endlocal

pause
这个大概知道是怎么回事,但具体的一些地方看不太懂!
setlocal enabledelayedexpansion这个ms的解释是启动或停用延缓环境变量扩展名。
可我不是很理解这句话的意思!
在有什么是命令扩展名??扩展名?想不明白是什么意思?
在有他具体起到什么作用?启动延缓??不明白?
for /f "tokens=1,2* delims=:" %%i in ('findstr /n . %mm%') do echo ^!start^!%%j^!end^! >>22.txt
这句中findstr/n        ms的解释是/N        在匹配的每行前打印行数。(我没看到打印行数啊)
还有后面那个.是做什么用的?
echo ^!start^!%%j^!end^!   
在这里^这个符号是转义符号吗?转义符号是做什么用的?我去掉它也能用啊!!
还有%%j是做什么的?我在代码里看不到他的定义啊!
作者: namejm    时间: 2006-12-18 13:45
  关于启用变量延缓的详细解释,可以参考这个帖子:http://www.cn-dos.net/forum/viewthread.php?tid=20733&fpage=2。

  findstr /n 打印了行数而你却没看到,是因为在 echo 的时候,就没让它显示出来,这与前面的设置及后面的 echo 语句有关系。假设你的 test.txt 中存在若干行信息,运行如下批处理代码来观察屏幕显示:

  1. @echo off
  2. findstr /n *. test.txt
  3. pause
复制代码

  你看到了什么?是不是以 行号:行内容 的格式显示的?
  
  回到你的疑问中来:for /f "tokens=1,2* delims=:"  这部分的含义是:以冒号为分隔符,提取第一、二个冒号前的内容及第二个冒号后的所有内容(不考虑几个冒号连用的情况),第一个冒号前的内容被 %%i 接收,第二个冒号前的内容被 %%j 接收,剩余的所有内容被 %%k 接收,%%j 和 %%k 分别被 tokens= 这个部分的 2 和 * 定义;findstr .* 中的点号表示任意非空字符,.*连用表示任意字符(包括空字符)。

  转义字符的作用是取消某些符号的原有功能,把它们转化成一般的字符,主要为了处理重定向符号和管道符号。把这个功能用到其他场合,也会有意想不到的效果。比如,在命令行里,你运行 echo > 会提示你语法错误,运行 echo ^> 之后,就会在屏幕上显示字符 > 了,在这里,^ 把 重定向符号 > 转化成普通字符了。实际上,把所有要显示的内容之前加上^,都会显示原本的内容而不显示 ^。
作者: 鹤冲天    时间: 2006-12-23 20:00
@echo off
for /r %%i in (*.bat) do call :bagpipe "%%i"(这段代码是做什么的我大概明白,但我要解释它如何解释呢??)
cls
echo;
echo:
echo.
echo           懒懒的阳光懒懒的爬进窗... ...
goto :eof(:eof?这是什么??跳转到eof!可我没看到它啊!?)


:bagpipe
echo %1
pause 1>nul

pause
作者: namejm    时间: 2006-12-23 22:09
  如果 goto :eof 不在被 call 的标签段中,并且没有 :eof 标签段的话,那么,goto :eof 等价于 exit 命令;如果它在某个被 call 的标签段中,并且没有定义 :eof 标签段,那么,它的意思就是跳转到批处理文件的末尾。
作者: lxf801031    时间: 2006-12-25 09:06
晕了
谢谢上边的讨论
作者: 鹤冲天    时间: 2006-12-25 14:28
晕,怎么把这精华帖算到偶头上了??偶何德何能??岂敢在这里妄自尊大!
强烈建议斑竹将此精华帖算到nemejm老师名下!!
作者: nhyj    时间: 2006-12-25 14:49
学习了!!!!
作者: namejm    时间: 2006-12-25 16:20
原帖由 鹤冲天 于 2006-12-25 02:28 PM 发表
晕,怎么把这精华帖算到偶头上了??偶何德何能??岂敢在这里妄自尊大!
强烈建议斑竹将此精华帖算到nemejm老师名下!!

  加精的目的是让更多的人来关注,能达到这个目的我就很高兴了,至于精华算在谁的名下,对我来说不是很重要。再说,你发起了这个讨论,并且一直在关注它,版主也应该奖励一下你啊:P
作者: 6618    时间: 2006-12-25 23:55
正如namejm朋友所言。首先,楼主你的学习精神值得我学习,其次namejm朋友的无私精神更值得我们学习,关注这一帖,我们能明白更多的东西,所以我把这一帖加精了。

如果这一帖因为加精了而影响了两位朋友的继续讨论的话,我愿意取消此帖的加精。
作者: namejm    时间: 2006-12-26 00:09
  加精不会影响继续讨论哈,反倒能吸引更多的人来参与讨论,更能推动讨论往深入的方向发展,楼主就别计较那么多了。
作者: 鹤冲天    时间: 2006-12-26 10:21
呵呵,影响讨论那是不可能的!(我脸皮多厚啊!:lol)名利本是过眼之烟云,偶本无意(也无力)争取!
偶在浩瀚的internet海洋中,挣扎了进10年!今日方知论坛之“真正”魅力!!在这虚拟的世界中有namejm老师和无优众热心网友能成为偶的良师益友此生足以!
此帖精华偶姑且厚着脸皮收下!希望我能尽快掌握这些知识把谈论引入深处(别总是问点白痴问题!:L!!)
也不枉namejm老师和6618斑竹对偶的帮助和厚爱!!
如有言语不当之处请各位多多海涵!!
作者: 鹤冲天    时间: 2006-12-27 14:28
在我某个文件夹下有个EXE文件,我应如何准确获知它的路径,并将其添加到注册表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]键值下,跟随系统一同启动!?
作者: ccwan    时间: 2006-12-27 17:12
假设你要找的程序为a.exe,代码如下:

  1. :: code by ccwan CMD@XP
  2. @echo off
  3. for /d %%i in (c d e f g h) do (
  4.       for /f "delims=" %%i in ('dir /a-d/s/b %%i:\a.exe') do (
  5.           set var=%%~fi
  6.       )
  7. ) 2>nul
  8. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v a.exe /t reg_sz /d %var% /f
复制代码

作者: 鹤冲天    时间: 2006-12-27 20:13
在我这里运行出错!
打开了注册表,添加了个键值,但没有内容!
而且运行时间很长!!
不知道是我那里弄错了!?1
作者: 鹤冲天    时间: 2006-12-27 20:25
我胡写了一个,别笑话我啊!!
能得到详细的路径,但不能添加到注册表!
下面以添加tree.txt为例:
@echo off
echo Windows Registry Editor Version 5.00 >c:\1.reg
echo. >>c:\1.reg
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]>>c:\1.reg
echo "KAV"="%~dp0tree.txt">>c:\1.reg
regedit /s c:\1.reg
del /q /f c:\1.reg

这样得到的注册表格式是
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"KAV"="F:\My Virtual Machines\共享\DOS实例练习\DOS实例练习\tree.txt"

这样的信息添加是失败的!
要是能得到这样的信息就能成功"KAV"="F:\\My Virtual Machines\\共享\\DOS实例练习\\DOS实例练习\\tree.txt"我如何才能得到这样的信息??!
作者: namejm    时间: 2006-12-27 21:47
  要把路径中的单斜杠换成双斜杠,可以参考如下演示代码:

  1. @echo off
  2. set "var=%cd%"
  3. set "str=%var:\=\\%"
  4. echo "%str%"
  5. pause
复制代码

作者: ccwan    时间: 2006-12-28 08:10
不知道鹤冲天兄所说的时间很长有多长?我这里几秒而已。这可是全盘搜索啊。
至于键值没有内容,我想问你要找的程序是什么,在那个盘里?有几个呢?
作者: 鹤冲天    时间: 2006-12-28 10:19
原帖由 ccwan 于 2006-12-28 08:10 AM 发表
不知道鹤冲天兄所说的时间很长有多长?我这里几秒而已。这可是全盘搜索啊。
至于键值没有内容,我想问你要找的程序是什么,在那个盘里?有几个呢?

哦,在我这里大概有10-20秒左右吧!呵呵,这应该是我的机器比较垃圾的过!
键值的确没有内容,我就以你所假设的a.exe来试的,文件和P处理在一个目录下!
我P处理水平很差,好多P我看不懂,只能是边试验边看代码,来了解代码的内容!
其实我的目的很简单,前几天从坛子里下了个咔吧3.5绿色版,但它并不自启动,所以我想弄个P,把它加到RUN里!
作者: ccwan    时间: 2006-12-28 10:33
呵呵,其实用dir本来就效率低,这也难怪的。
至于键值的确没有内容,我想是否路径中有空格呢?
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v a.exe /t reg_sz /d “%var%” /f
%var%加上引号兄再试试看好吗?
作者: 沙漠之子    时间: 2006-12-28 16:06
SC.bat

@echo off
cls
echo.
echo starting... ...

echo e 0100 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00>>tvis
中间省略
echo e 7AF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>>tvis
echo rcx>>tvis
echo 7A00>>tvis
echo n tvisGRAY>>tvis
echo w>>tvis
echo q>>tvis
debug<tvis>nul

del tvis
ren tvisGRAY sc1.exe
echo Finished!!!
pause


好像将某的程序的16进制的码写到tvis,后面的命令好像是编译他

能具体说说红色部分的意义吗,不知该部分通用吗

[ 本帖最后由 沙漠之子 于 2006-12-28 04:08 PM 编辑 ]
作者: namejm    时间: 2006-12-28 16:17
  红色部分是汇编代码,我也不知道确切含义,请高人出来解释一下吧。
作者: 鹤冲天    时间: 2006-12-28 21:52
原帖由 ccwan 于 2006-12-28 10:33 AM 发表
呵呵,其实用dir本来就效率低,这也难怪的。
至于键值的确没有内容,我想是否路径中有空格呢?
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v a.exe /t reg_sz /d ...
你能不能直接编译成BAT,附件给我,我想看看我到底是那里错了!
谢谢!
作者: 鹤冲天    时间: 2006-12-28 22:01
原帖由 namejm 于 2006-12-27 09:47 PM 发表
  要把路径中的单斜杠换成双斜杠,可以参考如下演示代码:

@echo off
set "var=%cd%"
set "str=%var:\=\\%"
echo "%str%"
pause

能用了!呵呵,但我不是很理解,等我想想在把代码贴上来,大家给看看啊!!

[ 本帖最后由 鹤冲天 于 2006-12-28 10:19 PM 编辑 ]
作者: 少年张丰    时间: 2006-12-29 15:21
已经收下了,谢谢!!!
作者: namejm    时间: 2006-12-29 16:16
原帖由 鹤冲天 于 2006-12-28 10:01 PM 发表

能用了!呵呵,但我不是很理解,等我想想在把代码贴上来,大家给看看啊!!

  在 set 命令的帮助中有这么一段话:

  1. 环境变量替换已如下增强:

  2.     %PATH:str1=str2%

  3. 会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。
  4. 要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。
  5. "str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的
  6. 开始到 str1 剩余部分第一次出现的地方,都一直保持相配。
复制代码

作者: cyf123456    时间: 2006-12-29 20:37
向高手敬礼!
作者: 沙漠之子    时间: 2006-12-31 14:00
SC.bat

@echo off
cls
echo.
echo starting... ...

echo e 0100 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00>>tvis
中间省略
echo e 7AF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>>tvis
echo rcx>>tvis <---查看bx寄存器
echo 7A00>>tvis <----输入字节数(十六进制)
echo n tvisGRAY>>tvis<---程序名
echo w>>tvis<---写入程序
echo q>>tvis<---退出debug
debug<tvis>nul

del tvis
ren tvisGRAY sc1.exe
echo Finished!!!
pause


实际使用debug命令

Debug:E(键入)

将数据输入到内存中指定的地址。   
可以按十六进制或  ASCII  格式键入数据。以前存储在指定位置的任何数据全部丢失。   
e  address