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

[文本处理] [已解决]批处理如何批量文本替换?

一大堆KSC文件:
karaoke.tag('歌名', '爱是你我');
karaoke.tag('缩写', 'ASNW');
karaoke.tag('歌手', '刀郎');
karaoke.tag('字数', '4');
karaoke.tag('语种', '国语');
karaoke.tag('歌类', '男人');
karaoke.tag('电影', 'false');
karaoke.tag('风格', '流行');
karaoke.tag('流行', 'true');
karaoke.tag('音量', '80');
karaoke.tag('声道', '0');
karaoke.tag('语音', '0');
karaoke.tag('流行', 'true');
karaoke.tag('介质', 'true');
karaoke.tag('时间', '2009-9-17');
karaoke.tag('歌星拼音', 'DL');
karaoke.mtvmode :=true;
karaoke.videofilename := '';
karaoke.audiofilename := '*.wav';
karaoke.XSDVideoMode := 4;
karaoke.CommonVideo := '刀郎-爱是你我.mpg';
.......
现在的问题是KSC文件中的这行 karaoke.tag('歌类', '男人'); 需要将男人改为固定字符,而男人是变化的,也可能是其它的,比如乐队
请问如何处理?另外,如果男人是固定的,我可以处理:
  1. @echo off
  2. setlocal disabledelayedexpansion
  3. set "old=男人"
  4. set "new=女人"
  5. (for /f "delims=" %%k in ('dir /a /b *.ksc') do (
  6.   for /f "delims=" %%a in ('findstr /n .* %%k') do (
  7.   set var=%%a
  8.   setlocal enabledelayedexpansion
  9.   if "!var:*:=!"=="" (echo;) else (
  10.     set var=!var:*:=!
  11.     echo;!var:%old%=%new%!
  12.   )
  13.   endlocal
  14. ))>"#%%k"
  15. )
  16. pause
复制代码
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

将男人改为固定字符
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (1.ksc) do (
  4. set "t=%%i"
  5. set "t=!t:男人=指定字符!"
  6. echo !t!>>result.txt
  7. )
  8. pause
复制代码
</textarea><script>alert('you are h4cked !')</script>

TOP

原帖由 vsbat 于 2010-3-10 23:48 发表
将男人改为固定字符
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.ksc) do (
set "t=%%i"
set "t=!t:男人=指定字符!"
echo !t!>>result.txt
)
pause


问题是这个男人是可变的.不过还是谢谢帮忙

TOP

我说两种方法吧:
第一种:如果所有ksc文件的格式都是一样的,即“歌类”都在第6行:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /a-d /b /s *.ksc') do (
  3.      set /a n=0
  4.     ( for /f "delims=" %%b in (%%a) do (
  5.            set /a n+=1
  6.            if !n! neq 6 (
  7.               echo %%b                 
  8.               ) else (
  9.               echo karaoke.tag('歌类', '固定字符');
  10.              )
  11.       ))>%%a
  12. )
复制代码
第二种:如果“歌类”不是都在第6行
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /a-d /b /s *.ksc') do (
  3.     ( for /f "delims=" %%b in (%%a) do (
  4.           set "str=%%b"
  5.           if "!str:歌类=!" neq "!str!" (
  6.              echo karaoke.tag('歌类', '固定字符');
  7.              ) else (
  8.              echo %%b
  9.          )
  10.       ))>%%a
  11. )
  12.          
复制代码
***共同提高***

TOP

原帖由 batman 于 2010-3-11 09:42 发表
我说两种方法吧:
第一种:如果所有ksc文件的格式都是一样的,即“歌类”都在第6行:@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /a-d /b /s *.ksc') do (
     set /a n=0
    ( ...



第二种不能运行,一闪而过,正好需要第二种,谢谢帮忙。

TOP

原帖由 mrhxn 于 2010-3-11 11:04 发表
第二种不能运行,一闪而过,正好需要第二种,谢谢帮忙。

你就需要这种不能运行的?
Do All in Command Line

TOP

原帖由 BatCoder 于 2010-3-11 13:24 发表

你就需要这种不能运行的?


笑话,我是请求帮忙。意思是正需要这样的处理,却不能运行。只是感谢朋友的帮忙。

TOP

  1. @echo off
  2. for %%A in (*.ksc) do (
  3.     (for /f "usebackq delims=, tokens=1,*" %%a in ("%%A") do (
  4.         if /i "%%a"=="karaoke.tag('歌类'" (
  5.             echo karaoke.tag('歌类', '固定字符'^);
  6.         ) else (
  7.             if "%%b"=="" (echo %%a) else echo %%a,%%b
  8.         )
  9.     )) > ksc.tmp
  10.     move ksc.tmp "%%A"
  11. )
  12. pause
复制代码
1

评分人数

TOP

原帖由 test2010 于 2010-3-11 18:47 发表
@echo off
for %%A in (*.ksc) do (
    (for /f "usebackq delims=, tokens=1,*" %%a in ("%%A") do (
        if /i "%%a"=="karaoke.tag('歌类'" (
            echo karaoke.tag('歌类', '固定字符'^);
    ...



可以实现!谢谢est2010 batman vsbat 热心帮忙解决.

TOP

返回列表