【问题标题】:Batch - String replacement with special characters批处理 - 用特殊字符替换字符串
【发布时间】:2015-09-24 08:59:15
【问题描述】:

我想使用批处理文件替换文件中的字符串。

字符串是:

),(

我想将其替换为:

),
(

我找到了几篇文章,比如这个:"how-to-replace-substrings-in-windows-batch-file",但是这个例子使用了一个没有特殊字符的虚拟字符串。

谢谢!

编辑

上下文:我使用mysqldump 提取数据库,并且我希望插入命令的每一行都位于新行上以提高可见性。

我不想使用--extended-insert=false,因为它会减慢重新插入备份的速度。

EDIT2

例子:

INSERT INTO `dummytable` (`dummycolumn`) VALUES (1),(2),(3);

我希望它是:

INSERT INTO `dummytable` (`dummycolumn`) VALUES (1),
(2),
(3);

【问题讨论】:

  • \n 应该是换行符还是真正的 \n 字符串?
  • 引号是字符串的一部分吗?

标签: windows batch-file cmd


【解决方案1】:

看看replacer.bat

call replacer.bat "e?C:\content.txt" "\u0022),(\u0022" "\u0022),\u000a(\u0022"

编辑不带引号:

call replacer.bat "e?C:\content.txt" "),(" "),\u000a("

windows 风格

call replacer.bat "e?C:\content.txt" "),(" "),\u000D\u000a("

您还可以查看FindReplJRepl,它们是更复杂的工具

【讨论】:

    【解决方案2】:

    这对我有用:

    @ECHO OFF
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET textFile=test.txt
    TYPE NUL>tempOut.txt
    FOR /F %%l IN (%textFile%) DO (
        SET line=%%l
        SET line=!line:"),("="),\n("!
        ECHO !line!>>tempOut.txt
    )
    MOVE /y tempOut.txt %textFile%
    

    【讨论】:

    • 我认为 OP 希望在 \n 的地方换行
    • 我刚刚测试了您的解决方案,但它对我不起作用,我的一半文件消失了:/
    • 能否请您发布您的文本文件的一部分以便我测试它?
    • 我给你加了一个例子=)
    【解决方案3】:

    如果模式始终相同,您可以批量处理标记和分隔符,如下所示:

    @echo off
    
    (echo INSERT INTO `dummytable` (`dummycolumn`^) VALUES (1^),(2^),(3^);
    )>%TEMP%\_file.tmp
    
    (FOR /F "tokens=1,2,3* delims=," %%a IN (%TEMP%\_file.tmp) do (
        echo %%a,
        echo %%b,
        echo %%c
    ))>_output.txt
    exit /b 0
    

    输出:

    INSERT INTO `dummytable` (`dummycolumn`) VALUES (1),
    (2),
    (3);
    

    编辑
    我从stackoverflownpocmaka 的帖子中找到了另一种方法

    @echo off
    
    setlocal disableDelayedExpansion
    REM Creating a Newline variable (the two blank lines are required!)
    set NLM=^
    
    
    set NL=^^^%NLM%%NLM%^%NLM%%NLM%
    
    setlocal enableDelayedExpansion
    
    for /f "delims=" %%a in (%TEMP%\_file.tmp) do (
        set "line=%%a"
        set line=!line:,(=,%NL%(!
        echo !line!
    )
    
    endlocal
    endlocal
    exit /b 0
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 2011-04-16
      • 1970-01-01
      • 2021-11-17
      • 2015-03-17
      相关资源
      最近更新 更多