Board logo

标题: [求助]修改[已解决] [打印本页]

作者: snmm2004     时间: 2008-5-22 17:54    标题: [求助]修改[已解决]

http://www.cn-dos.net/forum/viewthread.php?tid=40581&fpage=2

首先感谢zw19750516朋友帮我做的代码,很好用,现在又有新的思路,想改的简单点,请帮帮我。
读取配置文件(命令行=)这条信息,自动去掉(命令行=)这个代码,其他地方不需要修改,之后自动加上(load.exe)load.exe后面要有空格,再把单%全部修改为双%%一共100条左右,全部修改好后运行。

生成的标准代码如下
load.exe "%%01 [游戏]....." "%%02D:\AUTO-SYS\" "%%03C:\游戏\" "%%04" "%%05" "%%06" "%%07" "%%08" "%%09" "%%10E:\测试中\讯闪调用工具v1.3\load\pic\游戏.jpg" "%%11" "%%12" "%%133" "%%140" "%%151" "%%18skin0383.skn" "%%201" "%%211"

zw19750516代码如下
@echo off&setlocal enabledelayedexpansion
set t=%%%
set k=%%%%
for /f "skip=2 delims=命令行=" %%i in ('find "命令行" a.ini') do set str=%%i&call :lp
pause>nul&goto :eof
:lp
set a=!str:~,1!
set var=!var!!a!
if not "!var:~-2!"=="05" set str=!str:~1!&goto lp
set var=!var:~,-10!
echo load.exe !var:%t%=%k%! "%%05" "%%04" "%%06" "%%07" "%%08" "%%09" "%%10" "%%110" "%%12log.ini" "%%133" "%%140" "%%151" "%%18skin0383.skn" "%%201" "%%211"
set var=

我的配置文件大概有100条,拿1条做例子如下
[游戏]
网络目录=D:\AUTO-SYS
本地目录=C:\游戏
运行游戏=
启动参数=
导注册表=
预先执行=
预先执行参数=
忽略时间误差=3
排除文件=
排除目录=
弹出更新选择窗口=否
是否删除多余文件=否
对比大小=是
对比时间=是
命令行="%01 [游戏]....." "%02D:\AUTO-SYS\" "%03C:\游戏\" "%04" "%05" "%06" "%07" "%08" "%09" "%10E:\测试中\讯闪调用工具v1.3\load\pic\游戏.jpg" "%11" "%12" "%133" "%140" "%151" "%18skin0383.skn" "%201" "%211"

[ Last edited by snmm2004 on 2008-5-23 at 11:16 PM ]
作者: suntb     时间: 2008-5-22 18:22
为什么不一次性发帖?
作者: bat-zw     时间: 2008-5-22 18:29    标题: 还是我来吧:


@echo off&setlocal enabledelayedexpansion
set t=%%%
set k=%%%%
for /f "delims=" %%i in ('type a.ini') do (
     set /a n+=1
     echo %%i|findstr "命令行">nul&&set str=%%i
     if !n! equ 1 (
        echo %%i>a.ini
        ) else (
        if defined str (
          set str=!str:~4!
          echo load.exe !str:%t%=%k%!>>a.ini&set str=
          ) else (
          echo %%i>>a.ini
       )
    )
)
echo 改写a.ini完毕!  
pause>nul&goto :eof
[ Last edited by zw19750516 on 2008-5-22 at 10:11 PM ]
作者: 26933062     时间: 2008-5-22 19:01

@echo off&cd.>tmp.txt
for /f "delims=" %%i in (a.ini) do (
   for /f "tokens=1* delims==" %%a in ("%%i") do (
      if "%%a"=="命令行" (
         set "str=%%b"
         setlocal enabledelayedexpansion
         set str=!str:%%=%%%%!
         >>tmp.txt echo load.exe !str!
         endlocal
        ) else >>tmp.txt echo %%i
    )
)
del/q a.ini
ren tmp.txt a.ini
pause
[ Last edited by 26933062 on 2008-5-22 at 07:04 PM ]
作者: snmm2004     时间: 2008-5-22 20:30    标题: 谢谢朋友帮忙

小弟真的不会批处理,这样的批处理把我的原文件修改了,再帮我批一下。
生成代码不修改原文件,全部生成代码后要运行。
谢谢

生成的标准代码如下
load.exe "%%01 [游戏]....." "%%02D:\AUTO-SYS\" "%%03C:\游戏\" "%%04" "%%05" "%%06" "%%07" "%%08" "%%09" "%%10E:\测试中\讯闪调用工具v1.3\load\pic\游戏.jpg" "%%11" "%%12" "%%133" "%%140" "%%151" "%%18skin0383.skn" "%%201" "%%211"

[ Last edited by snmm2004 on 2008-5-22 at 08:32 PM ]
作者: terse     时间: 2008-5-22 21:08

@echo off&cd.>load_.ini
for /f "delims=" %%i in (a.ini) do (
set str=%%i&set %%i 2>nul
setlocal enabledelayedexpansion
if "!str:~,3!"=="命令行" (set str=!str:%%=%%%%!&>>load_.ini echo load.exe !str!)else >>load_.ini echo !str!
endlocal
)
start "" "load_.ini"

作者: snmm2004     时间: 2008-5-22 21:17
6楼的朋友,里面多了(命令行=)这个要自动去掉,完成后只要这个代码,其他全部不要
load.exe "%%01 [游戏]....." "%%02D:\AUTO-SYS\" "%%03C:\游戏\" "%%04" "%%05" "%%06" "%%07" "%%08" "%%09" "%%10E:\测试中\讯闪调用工具v1.3\load\pic\游戏.jpg" "%%11" "%%12" "%%133" "%%140" "%%151" "%%18skin0383.skn" "%%201" "%%211"

然后以批处理方式运行

[ Last edited by snmm2004 on 2008-5-22 at 09:25 PM ]
作者: bat-zw     时间: 2008-5-22 21:53    标题: 刚上来,原来是我理解错了:


@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.ini) do (
   set str=%%i
      if "!str:~,3!"=="命令行" (
         set str=!str:~4!
         set str=!str:%%=%%%%!
         start load.exe !str!
      )
)
echo 程序执行完毕!
pause>nul
[ Last edited by zw19750516 on 2008-5-22 at 11:00 PM ]
作者: snmm2004     时间: 2008-5-22 22:39
8楼兄弟,运行不了呀,是不是少了点命令,看这个代码里没我的(load.exe)命令呀

4楼的代码执行效率很快,修改100条只需要几秒,可以帮我改一下吗?

改成只要以下命令,再以批处理方式运行,全部运行完后自动退出

生成的标准代码如下
load.exe "%%01 [游戏]....." "%%02D:\AUTO-SYS\" "%%03C:\游戏\" "%%04" "%%05" "%%06" "%%07" "%%08" "%%09" "%%10E:\测试中\讯闪调用工具v1.3\load\pic\游戏.jpg" "%%11" "%%12" "%%133" "%%140" "%%151" "%%18skin0383.skn" "%%201" "%%211"
作者: bat-zw     时间: 2008-5-22 22:53
又修改了,再试。
作者: 26933062     时间: 2008-5-22 22:57
说实话,从头到尾一直不明白你的意识。
你是要提取a.ini文件中  命令行= 开头的行,
然后运行 load.exe “这里为:命令行= 后面的内容”
是这样吗?
作者: 26933062     时间: 2008-5-22 23:01

@echo off
for /f "tokens=1* delims==" %%i in ('findstr "^命令行" a.ini') do (
   set "str=%%j"
   setlocal enabledelayedexpansion
   set str=!str:%%=%%%%!
   start "" "load.exe" !str!
   endlocal
)
[ Last edited by 26933062 on 2008-5-22 at 11:39 PM ]
作者: snmm2004     时间: 2008-5-22 23:08
是这样
作者: snmm2004     时间: 2008-5-22 23:11
后面的代码提取不完整,我要的是整条的运行代码

比如下面代码用批处理运行

load.exe "%%01 [游戏]....." "%%02D:\AUTO-SYS\" "%%03C:\游戏\" "%%04" "%%05" "%%06" "%%07" "%%08" "%%09" "%%10E:\测试中\讯闪调用工具v1.3\load\pic\游戏.jpg" "%%11" "%%12" "%%133" "%%140" "%%151" "%%18skin0383.skn" "%%201" "%%211"

[ Last edited by snmm2004 on 2008-5-22 at 11:13 PM ]
作者: 26933062     时间: 2008-5-22 23:13
修改了,再试试。
作者: terse     时间: 2008-5-22 23:15


  Quote:
Originally posted by snmm2004 at 2008-5-22 21:17:
6楼的朋友,里面多了(命令行=)这个要自动去掉,完成后只要这个代码,其他全部不要
load.exe "%%01 [游戏]....." "%%02D:\AUTO-SYS\" "%%03 ...

首先 你确定运行后6楼代码后  还有(命令行=)吗? 至少我这里没有
第二正如26933062兄所说:
说实话,从头到尾一直不明白你的意识。
你是要提取a.ini文件中  命令行= 开头的行,
然后运行 load.exe “这里为:命令行= 后面的内容”
是这样吗?
如果是这样 这个贴里的10楼也已回复过  只是没你的反馈
http://www.cn-dos.net/forum/viewthread.php?tid=40581&fpage=2
也许我理解错误
作者: 26933062     时间: 2008-5-22 23:23
亲爱的楼主,若这一帖最终能解决你的问题,我真恨不得活活掐死你,批处理你不会就罢了,对问题的描述能力居然也如此之差,唉! 别人怎么帮你。。。。
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims==" %%i in ('findstr "^命令行" a.ini') do (
   set "str=%%j"
   set var=!var! !str:%%=%%%%!
)
start "" "load.exe !var!"
[ Last edited by 26933062 on 2008-5-22 at 11:24 PM ]
作者: bat-zw     时间: 2008-5-22 23:26
确实感觉有点累,呵呵,楼主的描述是不怎么地。
作者: snmm2004     时间: 2008-5-22 23:32
26933062和zw19750516第一条发的代码是对的,再去掉下面这些就可以了,然后运行代码
[游戏]
网络目录=D:\AUTO-SYS
本地目录=C:\游戏
运行游戏=
启动参数=
导注册表=
预先执行=
预先执行参数=
忽略时间误差=3
排除文件=
排除目录=
弹出更新选择窗口=否
是否删除多余文件=否
对比大小=是
对比时间=是
作者: snmm2004     时间: 2008-5-22 23:34
是我表达能力不好,不过非常需要这些代码
作者: bat-zw     时间: 2008-5-22 23:36
再测试我8楼的代码。。。。
作者: 26933062     时间: 2008-5-22 23:36
无语!
作者: snmm2004     时间: 2008-5-22 23:41
还是不行,如果得到以下代码就可以运行,你们第一条发的代码改出来的就可以运行

load.exe "%%01 [游戏]....." "%%02D:\AUTO-SYS\" "%%03C:\游戏\" "%%04" "%%05" "%%06" "%%07" "%%08" "%%09" "%%10C:\Documents and Settings\mmx\桌面\pic\游戏.jpg" "%%11" "%%12" "%%133" "%%140" "%%151" "%%18skin0383.skn" "%%201" "%%211"
作者: bat-zw     时间: 2008-5-22 23:42
26933062兄还是你来算了,我撤退了。
作者: 26933062     时间: 2008-5-22 23:44
8 楼若不行,就再试试12楼的,以作修改。
作者: snmm2004     时间: 2008-5-22 23:49
要正常运行代码如下

load.exe "%%01 [游戏]....." "%%02D:\AUTO-SYS\" "%%03C:\游戏\" "%%04" "%%05" "%%06" "%%07" "%%08" "%%09" "%%10C:\Documents and Settings\mmx\桌面\pic\游戏.jpg" "%%11" "%%12" "%%133" "%%140" "%%151" "%%18skin0383.skn" "%%201" "%%211"

LOAD.EXE参数说明:

%01=更新窗口标题
%02=远程目录
%03=本地目录
%04=强制更新
%05=注册表
%06=预先执行
%07=预先执行参数
%08=正常执行
%09=正常执行参数
%10=更新窗口的图片
%11=排除的文件夹
%12=排除的文件名
%13=对比误差时间
%14=游戏版本号
%15=删除多余文件 0--删除   1--不删除
%16=无
%17=无
%18=程序皮肤
%19=缓存文件 ( 既所谓的快照文件)
%20=对比大小 0--不对比   1--对比
%21=对比日期 0--不对比   1--对比
%22=是否更新 0启用 1不启用直接进游戏
%23=FTP地址
%24=FTP端口
%25=是否开启被动模式
%26=FTP帐号
%27=FTP密码
作者: 26933062     时间: 2008-5-22 23:52
忙活了一晚,感觉就是在和外星人说话,撤退。。。
作者: snmm2004     时间: 2008-5-22 23:53
你第一条给的命令可以,就是多了这些
[游戏]
网络目录=D:\AUTO-SYS
本地目录=C:\游戏
运行游戏=
启动参数=
导注册表=
预先执行=
预先执行参数=
忽略时间误差=3
排除文件=
排除目录=
弹出更新选择窗口=否
是否删除多余文件=否
对比大小=是
对比时间=是
作者: 26933062     时间: 2008-5-23 00:06
吐血!
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims==" %%i in ('findstr "^命令行" a.ini') do (
   set "str=%%j"
   >>b.ini echo !str:%%=%%%%!
)
start "" "b.ini"

作者: bat-zw     时间: 2008-5-23 00:26
总的来说,这贴子还是极具观赏性!!!
作者: snmm2004     时间: 2008-5-23 00:28
对的是这样,这下就是少了个load.exe代码没插进去,插到最前面,load.exe后面要有个空格,实在麻烦你了
作者: 26933062     时间: 2008-5-23 00:33
再别说不行了!!!!!
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims==" %%i in ('findstr "^命令行" a.ini') do (
   set "str=%%j"
   >>b.ini echo load.exe !str:%%=%%%%!
)
start "" "b.ini"

作者: snmm2004     时间: 2008-5-23 00:37
完全对了,那么怎么可以保存为bat格式,运行好后自动退出,这样就完美了
作者: bat-zw     时间: 2008-5-23 00:39
&&到现在我们才最终明白楼主的原意:
    重新生成一个bat文件,文件里只有楼主要求运行的命令,再运行这个bat文件。
    我晕,真的感觉和外国人进行了一次长谈。。。
----------------------------------------------------------------------------------------------------------

@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims==" %%i in ('findstr "^命令行" a.ini') do (
   set "str=%%j"
   >>b.bat echo load.exe !str:%%=%%%%!
)
start "" "b.bat"


[ Last edited by zw19750516 on 2008-5-23 at 12:43 AM ]
作者: snmm2004     时间: 2008-5-23 00:46
真的对不起,我对命令一点也不懂,其实我是在维护网吧,想自己架一个简单的三层更新,这样就不用一家一家的更新了,采用广域网映射ISCSI虚拟盘到各个网吧,用load.exe更新内核,调用load.exe工具找了半个月没找到理想的,就采用批处理读取有用的代码一起执行。
作者: snmm2004     时间: 2008-5-23 00:49
可以一条一条的执行了,执行完后停在CMD框中,执行完后可以自动退出吗?
作者: bat-zw     时间: 2008-5-23 00:53    标题: 最后一贴:加快点代码效率


@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.ini) do (
   set "str=%%i"
   if "!str:~,3!"=="命令行" (
      set str=!str:~4!
      echo load.exe !str:%%=%%%%!>>b.bat
   )
)
echo exit>>b.bat
start "" "b.bat"


[ Last edited by zw19750516 on 2008-5-23 at 12:55 AM ]
作者: snmm2004     时间: 2008-5-23 00:59
太完美了,谢谢这么多兄弟这么晚了帮我,太感谢了,祝你们天天快乐,笑口常开。
作者: snmm2004     时间: 2008-5-23 01:11
晚安,祝兄弟们做个好梦!