批处理 - 带有特殊字符的字符串替换

3

我希望用批处理文件替换文件中的字符串。

要替换的字符串是:

),(

我想用以下内容替换它:

),
(

我发现了一些帖子,比如这个:"how-to-replace-substrings-in-windows-batch-file",但是这个示例使用的是一个没有特殊字符的虚拟字符串。
谢谢!
编辑:
背景:我使用mysqldump来提取数据库,并且我希望每个插入命令的行都在新的行上以获得更好的可读性。
我不想使用--extended-insert=false,因为它会减慢备份的重新插入速度。
编辑2:
示例:
INSERT INTO `dummytable` (`dummycolumn`) VALUES (1),(2),(3);

I want it to be:

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

“\n” 应该是换行符还是真正的字符串“\n”? - npocmaka
引号是否属于字符串的一部分? - npocmaka
3个回答

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。这些工具与编程有关。

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%

我认为OP希望在\n的位置进行换行。 - npocmaka
我刚刚测试了你的解决方案,但对我来说不起作用,我的文件消失了一半 :/ - Sara
请问您能否发布文本文件的一部分,以便我进行测试? - MichaelS
我为您添加了一个例子 =) - Sara

0

如果批处理中的模式始终相同,您可以像这样处理令牌和分隔符:

@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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接