Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理脚本-查找并替换目录中多个文件中的文本,而不要求用户安装任何程序或向我的批处理脚本添加其他文件_Windows_Batch File_Replace_Cmd_Find - Fatal编程技术网

Windows 批处理脚本-查找并替换目录中多个文件中的文本,而不要求用户安装任何程序或向我的批处理脚本添加其他文件

Windows 批处理脚本-查找并替换目录中多个文件中的文本,而不要求用户安装任何程序或向我的批处理脚本添加其他文件,windows,batch-file,replace,cmd,find,Windows,Batch File,Replace,Cmd,Find,我需要一个批处理文件,搜索一个文本(例如,FOO),并替换为另一个文本(例如,酒吧)在一个文件夹及其子文件夹中的所有文本文件 我需要将此批处理文件提供给用户。因此,不可能要求用户安装任何其他内容,而且我不想将其他文件添加到我的批处理脚本中,这是否可行?对于这个问题,我找到了很多答案,但每个人都建议安装其他程序或向批处理脚本中添加一个文件。有人能帮我吗 for /r %i in (bar.txt) do echo ren "%i" foobar.txt 只有在确定文件将被正确重命名后,才能删除e

我需要一个批处理文件,搜索一个文本(例如,FOO),并替换为另一个文本(例如,酒吧)在一个文件夹及其子文件夹中的所有文本文件

我需要将此批处理文件提供给用户。因此,不可能要求用户安装任何其他内容,而且我不想将其他文件添加到我的批处理脚本中,这是否可行?对于这个问题,我找到了很多答案,但每个人都建议安装其他程序或向批处理脚本中添加一个文件。有人能帮我吗

for /r %i in (bar.txt) do echo ren "%i" foobar.txt
只有在确定文件将被正确重命名后,才能删除
echo

要在批处理文件中使用它,请向变量添加其他
%
,如:

@echo off
for /r %%i in (bar.txt) do echo ren "%%i" foobar.txt
只有在确定文件将被正确重命名后,才能删除
echo

要在批处理文件中使用它,请向变量添加其他
%
,如:

@echo off
for /r %%i in (bar.txt) do echo ren "%%i" foobar.txt
这里有一个简单而纯粹的解决方案——我们称之为
replac.bat

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“_ROOT=%~3”&rem//(根目录的路径;第三个命令行参数)
设置“_MASK=%~4”&rem//(文件搜索模式;第四个命令行参数)
设置“_SEARCH=%~1”&rem//(搜索字符串;第一个命令行参数)
设置“_REPLAC=%~2”&rem//(替换字符串;第二个命令行参数)
设置“_CASE=#”&rem//(对于不区分大小写的搜索清除)
设置“_recurse=#”&rem//(对于非递归搜索清除)
设置“\u TMPF=%TEMP%\%~n0\u%RANDOM%.tmp”&rem/(临时文件的路径)
rem//验证传递的命令行参数,应用默认值:
如果未定义搜索退出/B 1
如果未定义_根集“_根=”
如果未定义_maskset“_MASK=*.txt”
rem//准备“如果”选项(不区分大小写)供以后使用:
如果已定义_CASE(设置“IFSW=”)else(设置“IFSW=/I”)
rem//Prepare`for`选项(递归)供以后使用:
如果已定义_recurse(设置“FOROPT=/R”),则为else(设置“FOROPT=”)
rem//临时更改为根目录:
按下按钮“%_根%”| |退出/B 1
rem//循环浏览目录树中的所有匹配文件:
对于(“%\u MASK%”中的%FOROPT%%%F,请执行以下操作(
rem//写入临时文件:
>“%\u TMPF%”(
设置“标志=”
rem/*逐行读取当前文件;使用'findstr'在每行之前
rem其行号和冒号“:”;这样空行显示为非空
rem改为'for/F',这样可以避免忽略它们;否则为空行
rem迷路了:*/
对于/F“delims=“%%L in('findstr/N“^”“%%~fF”)do(
rem//存储当前行文本:
设置“行=%%L”
setlocal EnableDelayedExpansion
rem//删除行号前缀:
设置“行=!行:*=!”
rem//跳过空行文本的替换:
如果定义行(
rem/*使用'for/F'循环以避免案例搜索或替换时出现问题
rem字符串包含引号“`”:*/
对于/F“tokens=*delims=*=eol=~”%%K in(“!\u SEARCH!=!\u REPLAC!”)执行以下操作(
rem//拆分搜索和替换字符串:
对于/F“令牌=1 delims==eol==”%%I in(“%%K”)do(
rem//处理区分大小写的查询:
如果%IFSW%“!LINE!”==”!LINE:%%I=%%I!”(
rem//检测更换是否更改行:
如果不是“!LINE!”==”!LINE:%%K!”(
rem//实际执行子字符串替换:
设置“行=!行:%%K!”
设置“标志=#”
)
)
)
)
)
rem//输出结果行文本:
回声(!线!
如果定义了标志(endlocal&设置“FLAG=#”),则为其他(endlocal)
)
)
rem//检查文件内容在替换时是否会更改:
如果定义了标志(
rem//将临时文件移到原始文件上:
>nul move/Y“%\u TMPF%”“%%~fF”
)否则(
rem//只需删除临时文件:
删除“%\u TMPF%”
)
)
邻苯二胺
端部
退出/B
要使用此脚本,请分别提供搜索字符串作为第一个和替换字符串作为第二个命令行参数;第三个参数定义默认为当前工作目录的根目录,第四个参数定义默认为
*.txt
的文件模式:

replac.bat“Foo”“Bar”
以下限制适用:

  • 所有匹配文件必须是带有Windows样式换行符的纯ASCII/ANSI文本文件
  • 文件中的行以及搜索和替换字符串的长度都不能超过大约8190字节/字符
  • 搜索字符串不得为空,不得以
    *
    ~
    开头,且不得包含
    =
  • 搜索和替换字符串不得包含
    ^
    • 这里有一个简单而纯粹的解决方案——我们称之为
      replac.bat

      @echo关闭
      setlocal EnableExtensions DisableDelayedExpansion
      rem//在此处定义常量:
      设置“_ROOT=%~3”&rem//(根目录的路径;第三个命令行参数)
      设置“_MASK=%~4”&rem//(文件搜索模式;第四个命令行参数)
      设置“_SEARCH=%~1”&rem//(搜索字符串;第一个命令行参数)
      设置“_REPLAC=%~2”&rem//(替换字符串;第二个命令行参数)
      设置“_CASE=#”&rem//(对于不区分大小写的搜索清除)
      设置“_recurse=#”&rem//(对于非递归搜索清除)
      设置“\u TMPF=%TEMP%\%~n0\u%RANDOM%.tmp”&rem/(临时文件的路径)
      rem//验证传递的命令行参数