批处理 - 使用特殊字符替换字符串

时间:2015-09-24 08:59:15

标签: windows batch-file cmd

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

字符串是:

),(

我希望将其替换为:

),
(

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

谢谢!

修改

上下文:我使用mysqldump来提取数据库,我希望insert命令的每一行都在新行上以获得更多可见性。

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

EDIT2

示例:

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

我希望它是:

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

3 个答案:

答案 0 :(得分:1)

查看replacer.bat

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

编辑,不带引号:

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

windows style

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

您还可以查看FindReplJRepl这些更复杂的工具

答案 1 :(得分:0)

这对我有用:

@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%

答案 2 :(得分:0)

如果模式始终相同,则批处理可以处理令牌和delim:

@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);

修改
我在stackoverflow

中找到了另一种来自npocmaka帖子的方法
@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