[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样交互式写入文件?

急求!-->批处理交互式写入文件

因工作需要,需要在我制作的程序安装过程中运行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

代码说明:
批处理会自动找到D:\VHMS\BIN\default.ini文件中,是 "DATA SOURCE=" "initial catalog=" "REGSERVERIP="的行,不管所在的行是第几行,只要和上面三个关键字任何一个一样则要求输入.
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (D:\VHMS\BIN\default.ini) do (
  3. set /a n+=1
  4. set a!n!=%%i
  5. if "%%i"=="DATA SOURCE=" (set /p DATA SOURCE=DATA SOURCE=
  6. set a!n!=DATA SOURCE=!DATA SOURCE!)
  7. if "%%i"=="initial catalog=" (set /p initial catalog=initial catalog=
  8. set a!n!=initial catalog=!initial catalog!)
  9. if "%%i"=="REGSERVERIP=" (set /p REGSERVERIP=REGSERVERIP=
  10. set a!n!=REGSERVERIP=!REGSERVERIP!)
  11. )
  12. del "D:\VHMS\BIN\default.ini"
  13. for /l %%i in (1,1,%n%) do (echo !a%%i!>>"D:\VHMS\BIN\default.ini")
  14. echo 修改完成,按任意键退出.&pause>nul
复制代码

TOP

回复已发至email:leiyc@yahoo.cn
有问题请回来交流.

TOP

先谢谢你啊!不过我试了一下,只是把我原来的文件当中的所有的注释见容和空行给清除了,文件没有变化,
我的意思是说:
给出这样的提示,等待输入:

DATA SOURCE=_    (_,表示是DOS光标提示符,输入的内容写入文件中DATA SOURCE=这行,下同)

initial catalog=_

REGSERVERIP=_

TOP

  1. ::增加对空行的处理
  2. ::修改查找关键字时不区分大小写
  3. ::三个关键字DATA SOURCE=,initial catalog=,REGSERVERIP= 在文件中都必须是单独的一行.如果在关键字之后在内容将不会要求输入.
  4. @echo off&setlocal enabledelayedexpansion
  5. for /f "delims=: tokens=1,*" %%h in ('findstr /n .* D:\VHMS\BIN\default.ini') do (
  6. set /a n+=1
  7. set a!n!=%%i
  8. if /I "%%i"=="DATA SOURCE=" (set /p DATA SOURCE=DATA SOURCE=
  9.         set a!n!=DATA SOURCE=!DATA SOURCE!)
  10. if /I "%%i"=="initial catalog=" (set /p initial catalog=initial catalog=
  11.         set a!n!=initial catalog=!initial catalog!)
  12. if /I "%%i"=="REGSERVERIP=" (set /p REGSERVERIP=REGSERVERIP=
  13.         set a!n!=REGSERVERIP=!REGSERVERIP!)
  14.         )
  15.         del "D:\VHMS\BIN\default.ini"
  16. for /l %%i in (1,1,%n%) do (echo.!a%%i!>>"D:\VHMS\BIN\default.ini")
  17. echo 修改完成,按任意键退出.&pause>nul
复制代码

[ 本帖最后由 foxJL 于 2008-5-10 21:33 编辑 ]

TOP

看楼主的意识好像是再运行某个程序时会自动启动一个cmd窗口,等待楼主输入内容,
而楼主需要的是把在这个窗口输入的内容和窗口提示符都保存在某个文件中,
最后再把保存的文件插入到D:\VHMS\BIN\default.ini文件相应的位置去,
不知是不是这个意识?
如果是,那么楼主在cmd输入时按以下内容输入试试
echo %cd%=xxxxxxxxxxxxx>>c:\tmp.txt
运行完成后打开c:\tmp.txt看看里面是不是你要的内容。如果正确,再来回帖。。
技术问题请到论坛发帖求助!

TOP

  演示代码如下:
  1. @echo off
  2. :: 代码放在ini文件相同目录下执行
  3. :: 要修改的三行数据,等号前不得有任何空格
  4. :: 行首不允许出现冒号
  5. :: 不对用户的输入做检查,对输入的特殊符号无法处理,但是文件中存在的特殊符号可以处理
  6. set DATASOURCE=
  7. set initialcatalog=
  8. set REGSERVERIP=
  9. set /p DATASOURCE=请输入DATASOURCE:
  10. set /p initialcatalog=请输入initialcatalog:
  11. set /p REGSERVERIP=请输入REGSERVERIP:
  12. for /f "tokens=1,2 delims=:=" %%i in ('findstr /ni "DATASOURCE= initialcatalog= REGSERVERIP=" default.ini') do call set %%i=%%%%j%%
  13. cd.>test.txt
  14. for /f "tokens=1* delims=:" %%i in ('findstr /n .* default.ini') do (
  15.     set "str=%%j"
  16.     setlocal enabledelayedexpansion
  17.     if defined %%i (
  18.         >>test.txt call echo %%j!%%i!
  19.     ) else >>test.txt echo.!str!
  20.     endlocal
  21. )
  22. copy default.ini default.ini.bak>nul
  23. move test.txt default.ini
  24. start default.ini
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

意思没理解,不好回答
@set,=学无止境
@for /l %%b in (0,1,6) do @call set/p= %%,:~%%b,1%%<nul

TOP

问题已经解决!感谢大家!感谢namejm兄弟!代码已经经过我的改动,加强了不少功能和运行效率,谢谢!

TOP

返回列表