CMD/BAT替换本目录子目录下所有txt/ini格式的文本字符

如何用CMD/BAT批处理命令修改本目录下及所有子目录内的txt/ini格式的文本内容字符!

如文件名称为:!Setup.txt Config.ini 带有特殊!字符

如图:

img

可以使用for循环和findstr命令来实现

@echo off
setlocal enabledelayedexpansion

set "search=old_text"
set "replace=new_text"

for /r %%F in (*.txt *.ini) do (
    echo Processing: %%F
    set "tempFile=%%\~dpnF.tmp"
    (
        for /f "usebackq delims=" %%L in ("%%F") do (
            set "line=%%L"
            setlocal enabledelayedexpansion
            echo !line:%search%=%replace%!
            endlocal
        )
    ) > "!tempFile!"
    move /y "!tempFile!" "%%F" > nul
)

echo Done.

cmd本身应该不可以替换文件内容,只能枚举文件
你要替换文件内容,可以用c语言写一个小程序,让bat调用

要使用CMD/BAT批处理命令修改本目录下及所有子目录内的文本字符,可以使用for /R命令递归遍历目录并对文件进行操作,结合其他命令来实现替换功能。下面是一个示例的CMD批处理命令:

@echo off
setlocal enabledelayedexpansion

set "search=要替换的文本"
set "replace=替换后的文本"

for /R %%F in (*.txt *.ini) do (
    set "file=%%F"
    echo 处理文件: !file!

    rem 创建临时文件
    set "tempfile=!file!.tmp"
    del "!tempfile!" 2>nul

    rem 逐行读取源文件并替换文本后写入临时文件
    for /F "usebackq delims=" %%A in ("!file!") do (
        set "line=%%A"
        setlocal enabledelayedexpansion
        set "line=!line:%search%=%replace%!"
        echo !line!>>"!tempfile!"
        endlocal
    )

    rem 删除源文件并将临时文件重命名为原文件名
    del "!file!"
    ren "!tempfile!" "%%~nxF"
)

endlocal

请将上述代码保存为一个批处理脚本文件(例如replace.bat),然后将要替换的文本和替换后的文本分别赋值给searchreplace变量。运行该批处理脚本文件后,它将遍历当前目录及所有子目录下的所有.txt.ini文件,将指定的文本字符替换为指定的替换字符。

请注意,在替换过程中,它会创建临时文件来保存替换后的内容,并在完成后将临时文件重命名为原文件名。因此,请确保在运行脚本之前对文件进行备份,以防出现意外情况。

此外,请谨慎使用批处理命令,确保在测试和备份数据之后再进行操作。

参考
https://www.cnblogs.com/Chary/p/5825189.html
https://blog.csdn.net/usenk/article/details/128786710

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    要实现这个需求,可以使用以下步骤:

    1. 使用“for”命令遍历目录及子目录下的所有文件。可以使用以下命令:
    for /r %%i in (*.txt, *.ini) do (
        REM 在这里编写需要执行的代码
    )
    
    1. 在“for”循环内部,可以使用“ren”命令将文件名中的特殊字符替换为空格或其他特定字符。可以使用以下命令:
    set "file=%%i"
    setlocal enabledelayedexpansion
    set "newFile=!file:!=!"
    ren "%%i" "!newFile!"
    endlocal
    
    1. 可以在“for”循环内部添加其他需要执行的操作,比如批量修改文件内容。可以使用以下命令:
    set "file=%%i"
    setlocal enabledelayedexpansion
    set "content="
    for /f "delims=" %%line in (!file!) do (
        set "line=!line:!=!"
        set "content=!content!!line!"
    )
    echo !content! > "!file!"
    endlocal
    

    请注意,这只是给出了一个示例,如果需要进行更复杂的操作,代码可能需要进行调整。另外,需要谨慎处理文件操作,确保备份数据以防止误操作。

    如果以上解决方案无法满足需求,可以考虑使用其他编程语言或脚本来实现。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

BAT批处理文本替换
可以参照这个例子


批处理批量替换文本内容,用bat代码全篇替换txt文本文件中指定字符信息
批处理批量替换文本内容,用bat代码全篇替换txt文本文件中指定字符信息_批处理 替换文本文件中的字符串_轶软工作室的博客-CSDN博客 批处理批量替换文本内容,用bat代码全篇替换txt文本文件中指定字符信息,替换路径不要写错了,替换内容尽量不要带空格,配合任务计划可以一劳永逸,其他请自行测试,感谢关注轶软工作室。@echo offsetlocal EnableDelayedExpansionset path_str="C:\Users\Admini_批处理 替换文本文件中的字符串 https://blog.csdn.net/usenk/article/details/128786710

你的问题是要替换ini/txt后缀的文件名称,还是替换ini/txt文件里面的指定内容,替换文件内容,可以参考使用下面代码:

@echo off
setlocal EnableDelayedExpansion
set path_str="C:\Users\Administrator\Desktop\1.txt"
set old_str=需要替换的原文本内容
set new_str=替换后的文本内容
set souerce_path=%path_str%
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%souerce_path%"') do (
    set "lineContent=%%j"
    setlocal EnableDelayedExpansion
    if not "!lineContent!"=="" set "lineContent=!lineContent:%old_str%=%new_str%!"
    >>"temp.txt" echo.!lineContent!
    endlocal
)
move /y temp.txt "%souerce_path%"
start mshta vbscript:CreateObject("Wscript.Shell").Popup(" 替换完成",5,"提示","64")(window.close)

要修改带有特殊字符的文件名,可以使用以下命令:


bash
@echo off  
setlocal enabledelayedexpansion  
  
rem 替换当前目录及其子目录中的文件名中的特殊字符  
for /r %%f in (*)!* do (  
    set "filename=%%~nxf"  
    set "newfilename=!filename:!=!  
    if "!newfilename!" neq "!filename!" (  
        ren "%%~ff" "!newfilename!"  
    )  
)  
  
echo All files processed.  
pause

@echo off
setlocal enabledelayedexpansion

set "folder=%cd%"

for /r "%folder%" %%f in (*.txt, *.ini) do (
    set "file=%%~f"
    set "tempfile=!file!_temp"

    rem 读取文件内容并替换字符
    (
        for /f "usebackq delims=" %%c in ("!file!") do (
            set "line=%%c"
            set "line=!line:!=^^^!^!"
            echo !line!
        )
    ) > "!tempfile!"

    rem 替换完毕后,将临时文件替换原文件
    move /y "!tempfile!" "!file!" >nul
)

echo 修改完成!

替换文件内容的话,用python写更方便

@echo off
setlocal enabledelayedexpansion

set "search=要替换的文本"
set "replace=替换后的文本"

for /r %%G in (*.txt *.ini) do (
    set "file=%%G"
    set "temp=!file:%search%=%replace%!"
    if not "!temp!"=="!file!" (
        echo 替换文件: !file!
        ren "!file!" "!temp!"
    )
)

echo 替换完成!
pause

请将上述代码保存为一个批处理文件(例如replace_text.bat),然后将该批处理文件放置在需要修改的目录下,双击运行即可。

在代码中,你需要修改search和replace变量的值来指定要替换的文本和替换后的文本。在示例中,search变量设置为要替换的文本,replace变量设置为替换后的文本。

该批处理命令会递归遍历当前目录及其所有子目录中的.txt和.ini文件,并将其中的文本进行替换。替换后的文件会被重命名为临时文件名,以避免覆盖原始文件。如果需要保留原始文件,可以根据需要修改代码。

请注意,在运行批处理命令之前,建议先备份目标文件,以防止意外情况发生。望采纳

采用chatgpt:
你可以使用批处理脚本(.bat)来实现替换本目录及其子目录下所有txt和ini格式的文本文件中的字符。以下是一个示例批处理脚本来实现这个任务:

@echo off
setlocal enabledelayedexpansion

set "search=要查找的字符串"
set "replace=要替换的字符串"
set "fileTypes=*.txt *.ini"

for /r %%F in (%fileTypes%) do (
    set "filePath=%%F"
    setlocal disabledelayedexpansion

    REM 获取文件名和扩展名
    set "fileName=%%~nxF"
    set "fileName=!fileName:^!=^^!"
    
    REM 利用延迟扩展的变量替换进行文本替换
    (for /f "tokens=* delims=" %%A in (!filePath!) do (
        set "line=%%A"
        setlocal enabledelayedexpansion
        set "line=!line:%search%=%replace%!"
        echo(!line!
        endlocal
    )) > "!fileName!.tmp"

    REM 删除原文件并将临时文件重命名为原文件名
    del "!filePath!" > nul
    ren "!fileName!.tmp" "%%~nxF"

    endlocal
)

echo 替换完成!
pause

在这个修改后的脚本中,我们使用了setlocal disabledelayedexpansion和endlocal来处理包含特殊字符的文件名。另外,为了正确处理包含"!"的文件名,我们还使用了set "fileName=!fileName:^!=^^!"来对"!"进行转义。

请按照之前的步骤将脚本保存为一个批处理文件(例如replace_text.bat),然后在要进行替换操作的目录中运行它。脚本将会递归地查找所有子目录下的txt和ini文件,并对它们进行文本替换。

请提前备份。

可以使用下面的批处理命令来替换本目录及其子目录下所有txt和ini文件中的文本字符:

@echo off
setlocal enableextensions enabledelayedexpansion
set "search=old_text"
set "replace=new_text"
for /r %%a in (*.txt *.ini) do (
    set "file=%%a"
    set "content="
    for /f "usebackq delims=" %%b in ("!file!") do (
        set "line=%%b"
        set "line=!line:%search%=%replace%!"
        set "content=!content!%%b\r\n"
    )
    (echo !content!) > "!file!"
)
echo Done.

将 "old_text"替换为要搜索的文本,将"new_text"替换为要替换的文本。
将上述代码复制到文本编辑器中,将文件类型更改为".bat"后,可以双击运行。

引用GPT回答:

@echo off
setlocal enabledelayedexpansion

set "search=old_string"
set "replace=new_string"

for /r %%G in (*) do (
  set "file=%%G"
  set "new_file=%%~nG.new%%~xG"
  
  < "!file!" (
    for /f "delims=" %%A in ('findstr /n "^"') do (
      set "line=%%A"
      setlocal disabledelayedexpansion
      set "line=!line:*:=!"
      setlocal enabledelayedexpansion
      set "line=!line:%search%=%replace%!"
      echo(!line!
    )
  ) > "!new_file!"
  
  move /y "!new_file!" "!file!" > nul
)

endlocal

请将 "old_string" 替换为要替换的旧字符串,将 "new_string" 替换为新字符串。将上述代码保存为批处理文件(例如 "modify_text.bat"),然后将批处理文件放置在需要修改的目录中运行。

该脚本会遍历目录及其子目录中的所有文件,并打开每个文件以逐行检查并替换目标字符串。然后,它将修改后的内容写入一个新文件,并将新文件重命名为原文件名以覆盖原文件。

要使用CMD / BAT批处理命令修改当前目录及其子目录中的文件名称中的特定文本字符,您可以尝试以下步骤:

  1. 创建一个批处理文件:打开文本编辑器(例如记事本)并创建一个新的批处理文件(以.bat为扩展名)。

  2. 编写批处理命令:在批处理文件中,使用以下命令来遍历当前目录及其子目录中的所有文件和文件夹:

@echo off
for /R %%F in (*) do (
    REM 在这里添加修改文件名称的命令
)
  1. 添加修改文件名称的命令:在上述代码的注释行中,添加修改文件名称的命令。例如,假设您想将文件名称中的所有!字符替换为#字符,可以使用以下命令:
@echo off
for /R %%F in (*) do (
    set "FileName=%%~nxF"
    setlocal enabledelayedexpansion
    set "NewFileName=!FileName:!=#!"
    ren "%%F" "!NewFileName!"
    endlocal
)

说明:

  • %%F 是当前正在处理的文件的占位符。
  • %%~nxF 是从文件路径中提取出文件名和扩展名的特殊变量。
  • setlocal enabledelayedexpansion 启用延迟变量扩展,以便在循环中使用变量 !

请注意,以上示例仅将!字符替换为#字符,您可以根据您的需求修改这个示例以满足您的具体要求。

  1. 保存并运行批处理文件:将批处理文件保存到目标文件夹中,并将其双击运行。它将在当前目录及其子目录中递归地修改文件名称。

请注意,在运行批处理命令之前,建议在测试目录中备份相关文件,以防意外修改。一旦测试通过并确认无误,您可以在实际目录上运行批处理命令。