| 
 
gundam525 
初级用户
 
  
 
  
  
积分 23 
发帖 8 
注册 2007-4-13 
状态 离线
 | 
『楼 主』:
 [求助]如何替换文本内容
 
使用 LLM 解释/回答一下
  
恕小弟愚钝,在论坛里没有发现相关帖子。 
问题如下: 
我有3个ini文件,里面内容是英文字符和符号。但有空行,空格。 
我想把这3个文件中的"ok,you find me"替换成 "finish" 
如何做啊?实在是急着找答案,往各位仁兄仁姐仁版主帮帮小弟~ 
拜谢先 
 
    
 
  
 |   
 | 
  2007-11-27 19:24 | 
  
 | 
 | 
 
lxmxn 
版主
 
        
 
  
 
积分 11386 
发帖 4938 
注册 2006-7-23 
状态 离线
 | 
『第 2 楼』:
 
 
使用 LLM 解释/回答一下
  
@echo off&Setlocal EnableDelayedExpansion 
for %%a in (*.ini) do ( 
    for /f "usebackq delims=" %%b in ("%%a") do ( 
         set string=%%b 
         set string=!string:ok,you find me=finish! 
         >>new_%%~nxa echo:!string! 
    ) 
) 
 
没怎么测试....有问题跟贴讨论。  
 
    
 
  
 |   
 | 
  2007-11-27 19:29 | 
  
 | 
 | 
 
gundam525 
初级用户
 
  
 
  
  
积分 23 
发帖 8 
注册 2007-4-13 
状态 离线
 | 
『第 3 楼』:
 
 
使用 LLM 解释/回答一下
  
在此,先谢谢lxmxn版主 
替换是替换了,但是结果有点让人意外。 
我把东西发上来吧。 
 
1.源文件没有变化,倒是自动生成了新文件,而且格式和原来的不一样了。 
把必须保留的空行删除掉了。 
 
    
 
  
 |   
 | 
  2007-11-27 19:52 | 
  
 | 
 | 
 
gundam525 
初级用户
 
  
 
  
  
积分 23 
发帖 8 
注册 2007-4-13 
状态 离线
 | 
『第 4 楼』:
 
 
使用 LLM 解释/回答一下
  
传不上来啊,我把测试的ini文件内容发上来吧 
文件名1.ini    2.ini 
其中,1.ini中的内容为: 
 
ok,you find me 
1111111 
ok,you find me 
 
ok,you find me 
11111111 
ok,you find me 
 
ok,you find me 
 
 
2.ini中的内容为: 
 
ok,you find me 
22222 
ok,you find me 
 
ok,you find me 
 
ok,you find me 
22222 
ok,you find me 
 
使用该命令后,新生成了3个文件-_-||| 
new_1.ini    new_2.ini   new_new_1.ini 
 
其中 
new_1.ini中的内容为: 
finish 
1111111 
finish 
finish 
11111111 
finish 
finish 
 
new_2.ini中的内容为: 
finish 
22222 
finish 
finish 
finish 
22222 
finish 
 
    
 
  
 |   
 | 
  2007-11-27 19:58 | 
  
 | 
 | 
 
upsco 
初级用户
 
  
 
  
  
积分 67 
发帖 32 
注册 2007-11-19 
状态 离线
 | 
『第 5 楼』:
 
 
使用 LLM 解释/回答一下
  
要保留空行,可以这样试试: 
 
@echo off&setlocal enabledelayedexpansion 
for /f "skip=2 tokens=1,2 delims=]" %%i in ('find /n /v "" 1.ini') do ( 
   if "%%j"=="" echo.>>new.ini else ( 
   set string=%%j 
   set string=!string:ok,you find me=finish! 
   echo !string!>>new.ini 
   ) 
)
  
 
    
 
  
 |   
 | 
  2007-11-27 20:13 | 
  
 | 
 | 
 
terse 
银牌会员
 
     
 
  
  
积分 2404 
发帖 946 
注册 2005-9-8 
状态 离线
 | 
『第 6 楼』:
 
 
使用 LLM 解释/回答一下
  
这样可以了 
 
@echo off 
for %%i in (*.ini) do ( 
if not defined %%i set %%i=a&& ( 
    for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%i"') do ( 
    set list=%%b 
    setlocal enabledelayedexpansion  
   if not "!list!"==""  set list=!list:ok,you find me=finish! 
echo/!list! >>"%%i.tmp"  
endlocal 
) 
move /y "%%i.tmp" "%%i" 2>NUL 
) 
) 
pause 
  
 
    
 
  
  |  
                  
  
                    简单!简单!再简单! |   
 | 
  2007-11-27 23:47 | 
  
 | 
 | 
 
wubozh 
初级用户
 
  
 
  
  
积分 40 
发帖 18 
注册 2006-2-22 
状态 离线
 | 
『第 7 楼』:
 
 
使用 LLM 解释/回答一下
  
set string=%%b 
         set string=!string:ok,you find me=finish! 
看不懂这两句。不知道这里的string是不是一个外部程序?好象dos下和xp下都没有啊?还是一个简单的变量 ? 
 
    
 
  
 |   
 | 
  2007-11-29 21:17 | 
  
 | 
 | 
 
wubozh 
初级用户
 
  
 
  
  
积分 40 
发帖 18 
注册 2006-2-22 
状态 离线
 | 
『第 8 楼』:
 
 
使用 LLM 解释/回答一下
  
if not "!list!"==""  set list=!list:ok,you find me=finish! 
请帮我解释一下这句的意义。特别是!list:ok,you find me=finish!这个。不知道是什么意思啊。 
 
    
 
  
 |   
 | 
  2007-11-29 21:27 | 
  
 | 
 | 
 
wubozh 
初级用户
 
  
 
  
  
积分 40 
发帖 18 
注册 2006-2-22 
状态 离线
 | 
『第 9 楼』:
 
 
使用 LLM 解释/回答一下
  
我试了一下,用@ echo %string:bcd=bbb%,会用bbb代替string变量里的bcd。可是,这种用法我没见到过。在哪儿有介绍呢?我在论坛上搜索也没搜索到。我是初学批处理啊。大家不要笑话 
 
    
 
  
 |   
 | 
  2007-11-29 21:45 | 
  
 | 
 | 
 
lxmxn 
版主
 
        
 
  
 
积分 11386 
发帖 4938 
注册 2006-7-23 
状态 离线
 | 
『第 10 楼』:
 
 
使用 LLM 解释/回答一下
  
Originally posted by wubozh at 2007-11-29 21:45: 
我试了一下,用@ echo %string:bcd=bbb%,会用bbb代替string变量里的bcd。可是,这种用法我没见到过。在哪儿有介绍呢?我在论坛上搜索也没搜索到。我是初学批处理啊。大家不要笑话  
看置顶新手FAQ“Question10”或者直接在命令看帮助set /?。  
 
    
 
  
 |   
 | 
  2007-11-30 00:01 | 
  
 | 
 | 
 
mailmail 
新手上路
 
 
 
  
  
积分 10 
发帖 10 
注册 2009-4-1 
状态 离线
 | 
『第 11 楼』:
 
 
使用 LLM 解释/回答一下
  
请问下,我用了lxmxn版主的语句测试我的一个文本,为什么我用这个运行以后会有result is 20 这句话呢? 
另外我把输出改为>就只能输出result is 20 了,这里如果只要输出最新的不用保留以前的不能直接把》改成>的吗?如下 
@echo off&Setlocal EnableDelayedExpansion 
for %%a in (nodata.txt) do ( 
    for /f "usebackq delims=" %%b in ("%%a") do ( 
         set string=%%b 
         set string=!string:CWBTF0004 - No data was matched to the specified options.=! 
         >>new_%%~nxa echo:!string! 
    ) 
) 
运行结果是 
Transfer file: d:\ad\ad.DTF 
 
Receive failed. 
Rows transferred: 0 
result is 20 
 
    
 
  
 |   
 | 
  2009-5-4 23:37 | 
  
 |