1

首先让我说我对脚本完全陌生。

我正在尝试开发一个脚本,它将找到给定的字符串并将其替换为另一个给定的字符串。它必须对文件夹/子文件夹中的每个文件执行此操作。

这必须是一个 bat 文件。这是我到目前为止所拥有的:

@echo off
set RESULT_FILE="result.txt"
set /p "var1=Enter the String to Find: "
set /p "var2=Enter the String to Replace with: "

pushd %~p0
for /f "delims=" %%a in ('dir /B /S *.js') do (
  for /f "tokens=3 delims=:" %%c in ('find /i /c "%var1%" "%%a"') do (
    if %%c neq 0 (
        echo %var1%
    )
 )
) 

popd

这是返回找到的变量,我只是在苦苦寻找如何替换它。

提前感谢您的帮助。

4

3 回答 3

3

你可以在 Windows 上使用sed吗?

for /f "delims=" %%a in ('dir /B /S /A-D *.js') do sed -ibak "s/%var1%/%var2%/g" "%%~fa"
用法:sed [OPTION]... {script-only-if-no-other-script} [input-file]...

  -n,--安静,--静音
                 抑制图案空间的自动打印
  -e 脚本,--表达式=脚本
                 将脚本添加到要执行的命令中
  -f 脚本文件,--file=脚本文件
                 将脚本文件的内容添加到要执行的命令中
  -i[后缀], --in-place[=后缀]
                 就地编辑文件(如果提供扩展名,则进行备份)
  -l N, --line-length=N
                 为“l”命令指定所需的换行长度
  -r, --regexp-扩展
                 在脚本中使用扩展的正则表达式。
  -s,--分开
                 将文件视为单独的而不是单个连续的
                 长流。
  --text 切换到文本模式
  -u,--无缓冲
                 从输入文件中加载最少量的数据并刷新
                 输出缓冲区更频繁
      --help 显示此帮助并退出
  -V, --version 输出版本信息并退出

如果没有给出 -e、--expression、-f 或 --file 选项,则第一个
非选项参数被当作 sed 脚本来解释。全部
其余参数是输入文件的名称;如果没有输入文件
指定,然后读取标准输入。
于 2013-06-28T13:24:51.327 回答
1

下面的链接可能会有所帮助。建议的解决方案是使用替换的字符串创建一个新文件,并删除旧文件。

如何替换Windows批处理文件中的子字符串

于 2013-06-28T13:29:55.260 回答
0

使用fart,你可以在一行 windows bat 脚本中做你想做的事。

fart.exe -r "C:\path\to\folder\*.*" string_to_be_replaced replace_string 

哪里-r代表Process sub-folders recursively

于 2016-03-10T10:08:06.043 回答