标题: [文本处理] 批处理怎样交互式写入文件? [打印本页]
作者: leic 时间: 2008-5-10 17:11 标题: 批处理怎样交互式写入文件?
急求!-->批处理交互式写入文件
因工作需要,需要在我制作的程序安装过程中运行CMD模式,显示DOS窗口下的交互操作:
显示相关的内容以供输入,然后添加写入一个文件中指定的行当中(文件已经存在,且有部分内容了,文件位置:D:\VHMS\BIN\default.ini)
举例如下:(DOS状态窗口):
DATA SOURCE=xxxxxxxxx (这里xxxx是输入的内容,下同;在文件的第3行)
initial catalog=xxxxxxxxx(在文件的第4行)
REGSERVERIP = xxxxxxxxxxx(在文件的第13行)
先这些,最后保存成default.ini,以供程序使用。我试过多个方法了,都不行,请高手指教!不胜感谢!(曾经用C写段程序,然后用BAT调用,但没成功)
因为小弟我比较少时间上网,可以邮件联系或QQ留言,谢谢:
email:leiyc@yahoo.cn
QQ:88014644
作者: foxJL 时间: 2008-5-10 19:45
代码说明:
批处理会自动找到D:\VHMS\BIN\default.ini文件中,是 "DATA SOURCE=" "initial catalog=" "REGSERVERIP="的行,不管所在的行是第几行,只要和上面三个关键字任何一个一样则要求输入.- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (D:\VHMS\BIN\default.ini) do (
- set /a n+=1
- set a!n!=%%i
- if "%%i"=="DATA SOURCE=" (set /p DATA SOURCE=DATA SOURCE=
- set a!n!=DATA SOURCE=!DATA SOURCE!)
- if "%%i"=="initial catalog=" (set /p initial catalog=initial catalog=
- set a!n!=initial catalog=!initial catalog!)
- if "%%i"=="REGSERVERIP=" (set /p REGSERVERIP=REGSERVERIP=
- set a!n!=REGSERVERIP=!REGSERVERIP!)
- )
- del "D:\VHMS\BIN\default.ini"
- for /l %%i in (1,1,%n%) do (echo !a%%i!>>"D:\VHMS\BIN\default.ini")
- echo 修改完成,按任意键退出.&pause>nul
复制代码
作者: foxJL 时间: 2008-5-10 19:54
回复已发至email:leiyc@yahoo.cn
有问题请回来交流.
作者: leic 时间: 2008-5-10 20:28
先谢谢你啊!不过我试了一下,只是把我原来的文件当中的所有的注释见容和空行给清除了,文件没有变化,
我的意思是说:
给出这样的提示,等待输入:
DATA SOURCE=_ (_,表示是DOS光标提示符,输入的内容写入文件中DATA SOURCE=这行,下同)
initial catalog=_
REGSERVERIP=_
作者: foxJL 时间: 2008-5-10 21:30
- ::增加对空行的处理
- ::修改查找关键字时不区分大小写
- ::三个关键字DATA SOURCE=,initial catalog=,REGSERVERIP= 在文件中都必须是单独的一行.如果在关键字之后在内容将不会要求输入.
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=: tokens=1,*" %%h in ('findstr /n .* D:\VHMS\BIN\default.ini') do (
- set /a n+=1
- set a!n!=%%i
- if /I "%%i"=="DATA SOURCE=" (set /p DATA SOURCE=DATA SOURCE=
- set a!n!=DATA SOURCE=!DATA SOURCE!)
- if /I "%%i"=="initial catalog=" (set /p initial catalog=initial catalog=
- set a!n!=initial catalog=!initial catalog!)
- if /I "%%i"=="REGSERVERIP=" (set /p REGSERVERIP=REGSERVERIP=
- set a!n!=REGSERVERIP=!REGSERVERIP!)
- )
- del "D:\VHMS\BIN\default.ini"
- for /l %%i in (1,1,%n%) do (echo.!a%%i!>>"D:\VHMS\BIN\default.ini")
- echo 修改完成,按任意键退出.&pause>nul
复制代码
[ 本帖最后由 foxJL 于 2008-5-10 21:33 编辑 ]
作者: 随风 时间: 2008-5-10 22:19
看楼主的意识好像是再运行某个程序时会自动启动一个cmd窗口,等待楼主输入内容,
而楼主需要的是把在这个窗口输入的内容和窗口提示符都保存在某个文件中,
最后再把保存的文件插入到D:\VHMS\BIN\default.ini文件相应的位置去,
不知是不是这个意识?
如果是,那么楼主在cmd输入时按以下内容输入试试
echo %cd%=xxxxxxxxxxxxx>>c:\tmp.txt
运行完成后打开c:\tmp.txt看看里面是不是你要的内容。如果正确,再来回帖。。
作者: namejm 时间: 2008-5-10 23:12
演示代码如下:- @echo off
- :: 代码放在ini文件相同目录下执行
- :: 要修改的三行数据,等号前不得有任何空格
- :: 行首不允许出现冒号
- :: 不对用户的输入做检查,对输入的特殊符号无法处理,但是文件中存在的特殊符号可以处理
- set DATASOURCE=
- set initialcatalog=
- set REGSERVERIP=
- set /p DATASOURCE=请输入DATASOURCE:
- set /p initialcatalog=请输入initialcatalog:
- set /p REGSERVERIP=请输入REGSERVERIP:
- for /f "tokens=1,2 delims=:=" %%i in ('findstr /ni "DATASOURCE= initialcatalog= REGSERVERIP=" default.ini') do call set %%i=%%%%j%%
- cd.>test.txt
- for /f "tokens=1* delims=:" %%i in ('findstr /n .* default.ini') do (
- set "str=%%j"
- setlocal enabledelayedexpansion
- if defined %%i (
- >>test.txt call echo %%j!%%i!
- ) else >>test.txt echo.!str!
- endlocal
- )
- copy default.ini default.ini.bak>nul
- move test.txt default.ini
- start default.ini
复制代码
作者: fml520 时间: 2008-5-11 10:21
意思没理解,不好回答
作者: leic 时间: 2008-5-11 14:17
问题已经解决!感谢大家!感谢namejm兄弟!代码已经经过我的改动,加强了不少功能和运行效率,谢谢!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |