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

[文本处理] 求助批处理如何从txt文本里,更新替换另一个文本内容?

以下是残废品,
  1. setlocal EnableDelayedExpansion
  2. for /f "eol=* tokens=*" %%i in ('type "童丽 - 绝对收藏.cue"') do (
  3. set str=%%i
  4. for /f "tokens=1-2 delims=." %%a in (曲目.txt) do (
  5. set var="%%b"
  6. set "str=!str:TITLE=TITLE %var%!"
  7. echo.!str!>>#))
  8. move # "童丽 - 绝对收藏.cue"
  9. pause
  10. exit
复制代码
运行结果如下:
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
REM COMMENT "ExactAudioCopy v1.1"
PERFORMER "童丽"
PERFORMER "童丽"
PERFORMER "童丽"
PERFORMER "童丽"
PERFORMER "童丽"
PERFORMER "童丽"
PERFORMER "童丽"
PERFORMER "童丽"
PERFORMER "童丽"
PERFORMER "童丽"
PERFORMER "童丽"
PERFORMER "童丽"
PERFORMER "童丽"
PERFORMER "童丽"
TITLE  "绝对收藏"
TITLE   "绝对收藏"
TITLE    "绝对收藏"
TITLE     "绝对收藏"
TITLE      "绝对收藏"
TITLE       "绝对收藏"
TITLE        "绝对收藏"
TITLE         "绝对收藏"
TITLE          "绝对收藏"
TITLE           "绝对收藏"
TITLE            "绝对收藏"
TITLE             "绝对收藏"
TITLE              "绝对收藏"
TITLE               "绝对收藏"


而我希得到的效果是:
——————————————————————————由
REM DISCID B80EFA0E
REM COMMENT "ExactAudioCopy v1.1"
PERFORMER "童丽"
TITLE "绝对收藏"
FILE "童丽 - 绝对收藏.wav" WAVE
  TRACK 01 AUDIO
    TITLE "曲目1"
    PERFORMER "童丽"
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "曲目2"
    PERFORMER "童丽"
    INDEX 01 04:29:38
——————————————————变成如下

REM DISCID B80EFA0E
REM COMMENT "ExactAudioCopy v1.1"
PERFORMER "童丽"
TITLE "绝对收藏"
FILE "童丽 - 绝对收藏.wav" WAVE
  TRACK 01 AUDIO
    TITLE "梅花梦"
    PERFORMER "童丽"
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "海恋"
    PERFORMER "童丽"
    INDEX 01 04:29:38




谢谢大神们

曲目.txt文件,一般是:

01.梅花梦
02.海恋
03.红豆曲
04.红烛泪
05.葬心
06.甜蜜的小雨
07.帝女花
08.又见雨夜花
09.楼台会
10.情深意长
11.情逝
12.海海人生
13.天女散花
14.送君

TOP

回复 1# bcetl
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. set "n=100"
  5. (for /f "delims=" %%i in ('type "童丽 - 绝对收藏.cue"') do (
  6.     set "str=%%i"
  7.     if "!str:    TITLE =!" neq "%%i" (
  8.         set /a n+=1
  9.         for /f "tokens=1-2 delims=." %%a in ('type "曲目.txt" ^| findstr /b "!n:~1!\."') do (
  10.             set "name=%%b"
  11.         )
  12.         echo,    TITLE "!name!"
  13.     ) else (
  14.         echo,%%i
  15.     )
  16. ))>"童丽 - 绝对收藏.new"
  17. move /y "童丽 - 绝对收藏.new" "童丽 - 绝对收藏.cue"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims=." %%a in (曲目.txt) do (
  4.     set /a n+=1
  5.     set _    TITLE "曲目!n!"=    TITLE "%%b"
  6. )
  7. (for /f "delims=" %%i in ('type "童丽 - 绝对收藏.cue"') do if defined _%%i (echo,!_%%i!) else echo,%%i)>new.txt
  8. pause
复制代码

TOP

另一个解法》利用批处理并行读取两个文件的技巧...
@echo off&setlocal enabledelayedexpansion
<"曲目.txt" (for /f "usebackq delims=" %%s in ("童丽 - 绝对收藏.cue") do (
        set sline=%%s
        if  "!sline:曲目=!" neq "%%s" (
                set/p  "title="
                echo,    TITLE "!title:~3!"
        ) else echo,%%s
))>"童丽 - 绝对收藏.cue.new"

TOP

回复 5# aloha20200628


    谢谢亲,无法运行哦。

TOP

本帖最后由 bcetl 于 2022-3-28 16:26 编辑

回复 3# Batcher


    谢谢亲,运行有效。


如果曲目"*.txt”和歌单“*.cue”是个变量,还存在空格,请问要怎么弄呀。怎么才能实现,拖放2个变量文本一丢,傻瓜式的脚本呢。


或者直接搜索当前目录的cue和txt文件

TOP

回复 4# qixiaobin0715


    运行无效。。。

TOP

回复 3# Batcher


    谢谢大神,顶礼膜拜。。。我用通配符,取得相对好一点的效果。



@echo off
setlocal enabledelayedexpansion
echo.
echo.
echo.
echo.
@echo 请只保留一个曲目TXT文件
echo.
echo.
echo.
pause
cd /d "%~dp0"
set "n=100"
(for /f "delims=" %%i in ('type "*.cue"') do (
    set "str=%%i"
    if "!str:    TITLE =!" neq "%%i" (
        set /a n+=1
        for /f "tokens=1-2 delims=." %%a in ('type "*.txt" ^| findstr /b "!n:~1!\."') do (
            set "name=%%b"
        )
        echo,    TITLE "!name!"
    ) else (
        echo,%%i
    )
))>"new"
move /y "new" "new.cue"
pause

TOP

返回列表