中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (已结)启动延缓环境变量的问题
作者:
标题: (已结)启动延缓环境变量的问题 上一主题 | 下一主题
linson
中级用户




积分 283
发帖 31
注册 2004-3-6
状态 离线
『楼 主』:  (已结)启动延缓环境变量的问题


%comspec% /V:ON
::cdkey.txt文件中有4个cdkey
set /A cd=%random%"%%"4
set /A b=%cd%+1
set /A a=0
for /f  %%i in (D:\game\本地游戏\CS1.5中文硬盘版\CS1.5中文硬盘版\cdkey.txt) do set /A a=a+1 && if "!a!"=="%b%" set cdkey=%%i && goto EOF
:EOF
echo Windows Registry Editor Version 5.00 > c:\123.reg
echo.>> c:\123.reg
echo [HKEY_CURRENT_USER\Software\Valve\CounterStrike\Settings] >> c:\123.reg
echo "Key"="%cdkey%" >> c:\123.reg
问题是这样的:因为bat中需要启动延缓环境变量扩展,所以要执行%comspec% /V:ON
不过现在当执行到%comspec% /V:ON 时就停了。请教一下如何解决这个问题?

[ Last edited by willsort on 2005-8-2 at 21:10 ]

2005-6-27 00:00
查看资料  发送邮件  发短消息 网志  OICQ (149525162)  编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 2 楼』:  

@echo off
if "%1" == "" start %comspec% /V:ON  /C %0.bat $
::cdkey.txt文件中有4个cdkey
set /A cd=%random%"%%"4
set /A b=%cd%+1
set /A a=0
for /f  %%i in (D:\game\本地游戏\CS1.5中文硬盘版\CS1.5中文硬盘版\cdkey.txt) do set /A a=a+1 && if "!a!"=="%b%" set cdkey=%%i &&goto EOF
:EOF
echo Windows Registry Editor Version 5.00 > c:\123.reg
echo. >> c:\123.reg
echo [HKEY_CURRENT_USER\Software\Valve\CounterStrike\Settings] >> c:\123.reg
echo "Key"="%cdkey%" >> c:\123.reg




偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2005-6-28 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 3 楼』:  

Re Climbing:
  第一句之后应再加一句类似 &&goto end 的语句,或者在第一句之下插入一行 if "%1"=="" goto end 的语句,然后再程序的最后加上 :end标签。否则,程序会出现“重入”问题,即当 %comspec% /c 执行完 %0.bat 之后,程序流程返回 %0.bat ,然后执行第二句以及其后的语句。
Re linson:
  建议不要在程序中使用 :EOF 标签,因为它是NT系列命令解释器 cmd.exe 预定义的标签,意指程序文本的末尾,这样使用会产生很多细节上的问题,比如使用 goto EOF 或者 goto eof 会跳转的你所定义的标签,而使用 goto :EOF 或者 goto :eof 则会跳转到程序文本的末尾。
  另外,建议在类似 :EOF 或者 :end 之类的标签后不要跟随任何代码,一者可以避免阅读上所产生的误导,另外也可以保留一个可以确保在程序最末尾的标签,以利于某些嵌套执行的子程序结束子进程。
  例如,在以上程序中,需要在 %comspec% /c %0 之后就结束整个程序,通常的做法正如我向 Climbing 兄提到的,在第一句之后添加 && goto end,本来更常件的办法是 goto eof,因为它可以不用再文本末尾显式地定义一个 :EOF 标签,但因为此时 :eof 已被你挪作它用,不再表示程序的文本末尾,所以不能用它跳转了。

[ Last edited by willsort on 2005-7-15 at 12:30 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-6-28 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 4 楼』:  

谢谢指教,还是我考虑不周全,因为我很少这样用,只是照猫画虎,画虎不成反类其犬了。照willsort的意思,批处理应该改成这样,假设批处理名叫chgcskey.cmd:
@echo off
if "%1" == "" start %comspec% /V:ON  /C %0 $ && goto eof
::cdkey.txt文件中有4个cdkey
set /A cd=%random%"%%"4
set /A b=%cd%+1
set /A a=0
for /f  %%i in (D:\game\本地游戏\CS1.5中文硬盘版\CS1.5中文硬盘版\cdkey.txt) do set /A a=a+1 && if "!a!"=="%b%" set cdkey=%%i &&goto chgkey
:chgkey
echo Windows Registry Editor Version 5.00 > c:\123.reg
echo. >> c:\123.reg
echo [HKEY_CURRENT_USER\Software\Valve\CounterStrike\Settings] >> c:\123.reg
echo "Key"="%cdkey%" >> c:\123.reg
regedit /s c:\123.reg
[ Last edited by willsort on 2005-8-2 at 21:12 ]



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2005-6-29 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
smileseeker
中级用户




积分 316
发帖 83
注册 2005-3-1
状态 离线
『第 5 楼』:  

hoho原来EOF和:EOF有这样的区别啊


2005-7-8 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 6 楼』:  

Re Climbing:

  补充两点我前述中没有注意到的问题:

  我注意到你调用%comspec%时使用了start,这有一个小问题,就是start会创建新窗口来调用%comspec%,因此运行时会有黑屏闪过。当然,可以使用“/b”参数来避免创建新窗口,但是可以不用这样麻烦,直接使用%comspec%即可。

  据我所知,start启动的进程结束后,不会设置%errorlevel%,这对本程序来说是有利的,因为后面使用了&&连接goto :EOF,它可以在cmd返回假值(非0的%errorlevel%)时仍然goto。但是对大部分程序来说,都是不利的,很多时候我们需要根据%errorlevel%决定第二语句的运行与否;如果仅想连续运行两个语句,使用单个“&”就够了。

  另外,“goto eof”只能返回自定义的 :eof 标签,而预定义的 :eof 需要使用 goto :eof,冒号是不可省略的。

  下面是我对程序第一句的修改稿:
if "%1" == "" %comspec% /V:ON /C %0 cmdshell & goto :eof
[ Last edited by willsort on 2005-7-27 at 13:48 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-7-26 21:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
treey
初级用户





积分 62
发帖 15
注册 2005-7-23
状态 离线
『第 7 楼』:  

谢谢willsort大哥!受教了!

2005-7-27 08:31
查看资料  发送邮件  发短消息 网志  OICQ (84771455)  编辑帖子  回复  引用回复

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


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



论坛跳转: