找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22394|回复: 8

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

[复制链接]
发表于 2022-3-26 23:52:53 | 显示全部楼层 |阅读模式
以下是残废品,
  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




谢谢大神们
 楼主| 发表于 2022-3-26 23:54:40 | 显示全部楼层
曲目.txt文件,一般是:

01.梅花梦
02.海恋
03.红豆曲
04.红烛泪
05.葬心
06.甜蜜的小雨
07.帝女花
08.又见雨夜花
09.楼台会
10.情深意长
11.情逝
12.海海人生
13.天女散花
14.送君
发表于 2022-3-27 07:56:48 | 显示全部楼层
回复 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"
复制代码
发表于 2022-3-27 09:15:27 | 显示全部楼层
  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
复制代码
发表于 2022-3-27 11:12:05 | 显示全部楼层
另一个解法》利用批处理并行读取两个文件的技巧...
@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"
 楼主| 发表于 2022-3-28 16:07:02 | 显示全部楼层
回复 5# aloha20200628


    谢谢亲,无法运行哦。
 楼主| 发表于 2022-3-28 16:12:37 | 显示全部楼层
本帖最后由 bcetl 于 2022-3-28 16:26 编辑

回复 3# Batcher


    谢谢亲,运行有效。


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


或者直接搜索当前目录的cue和txt文件
 楼主| 发表于 2022-3-28 16:13:19 | 显示全部楼层
回复 4# qixiaobin0715


    运行无效。。。
 楼主| 发表于 2022-3-28 16:41:53 | 显示全部楼层
回复 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 05:56 , Processed in 0.019781 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表