批处理文件 - 替换txt文件中的关键字

时间:2017-06-12 15:03:03

标签: windows file batch-file text replace

我正在尝试制作一些BAT文件,它们将扫描扩展名为.txt的所有文件,列出它们并替换多个关键字。我不知道什么是txt文件名。

这是我得到的:

@echo off

setlocal enabledelayedexpansion

set /a counter=1
set "SEARCH_A=KEYWORD1"
set "REPLACE_A=REPLACED1"
set "SEARCH_B=KEYWORD2"
set "REPLACE_B=REPLACED2"
set "newfile=Output.txt"

for /r %%i in (*.txt) do (

echo %%~nxi>> search_result.txt 

set "textfile=%%~nxi"
set "newfile=Output.txt"

(for /f "delims=" %%j in (!textfile!) do (
    set "line=%%j"
    setlocal enabledelayedexpansion
    set "line=!line:%SEARCH_A%=%REPLACE_A%!"
    set "line=!line:%SEARCH_B%=%REPLACE_B%!"
    echo(!line!
    endlocal
))>"%newfile%"

del !textfile!

rename %newfile%  !textfile!  

set /a counter=!counter!+1    


)

endlocal

它有点有效。我有两个问题:

  • 关键字替换不适用于名称中包含两个单词且间隔为空格的TXT文件。有没有办法解决这个问题?
  • 它还会检查低于.bat文件的目录中的文件。如何限制它只检查与.bat?
  • 相同级别的文件

请帮帮我。我总是很不错。

1 个答案:

答案 0 :(得分:1)

将所有(可能)包含空格的文件/ foldernames包含在引号中(更好:习惯用引号括起所有文件/ foldernames):

(for /f "usebackq delims=" %%j in ("!textfile!") do (

usebackq需要实际处理文本文件,而不仅仅是其名称的字符串)

del "!textfile!"
rename "%newfile%"  "!textfile!" 

for /r %%i in (*.txt) do (/r表示“递归”(包括子目录)。只需跳过/r即可处理当前没有子文件夹的文件夹。