如何编写Batch/Shell脚本向文本文件传递参数替换变量
没问题,我来给你分别讲讲Windows Batch脚本和Linux/macOS Shell脚本的实现方法,都是直接能上手用的:
Windows Batch 脚本实现
Batch脚本里我们可以借助延迟变量扩展来完成文本替换,下面是完整的脚本示例:
@echo off setlocal enabledelayedexpansion :: 检查是否传入了足够的参数 if "%~3"=="" ( echo 请传入3个参数:param1 param2 params echo 示例用法:script.bat "John Doe" "New York" "paramA paramB" exit /b 1 ) :: 把传入的参数赋值给变量 set "param1=%~1" set "param2=%~2" set "params=%~3" :: 逐行读取原文件内容并替换变量 set "content=" for /f "delims=" %%i in (example.txt) do ( set "line=%%i" set "line=!line:{param1}=%param1%!" set "line=!line:{param2}=%param2%!" set "line=!line:{params}=%params%!" set "content=!content!!line!^n" ) :: 将替换后的内容写入新文件(建议先备份原文件再考虑覆盖) echo !content! > example_modified.txt echo 替换完成,结果已保存到 example_modified.txt endlocal
说明:
- 脚本会先检查参数数量,不够的话会提示用法
- 替换后的内容默认输出到
example_modified.txt,如果要直接覆盖原文件,把最后一行的文件名改成example.txt即可,但记得先备份原文件 - 如果参数里包含特殊字符(比如
!、&),需要额外转义处理
Linux/macOS Shell 脚本实现
Shell环境下用sed命令做文本替换非常高效,下面是完整的脚本:
#!/bin/bash # 检查参数数量是否正确 if [ $# -ne 3 ]; then echo "请传入3个参数:param1 param2 params" echo "示例用法:./script.sh 'John Doe' 'New York' 'paramA paramB'" exit 1 fi # 赋值传入的参数 param1="$1" param2="$2" params="$3" # 使用sed进行全局替换,输出到新文件 sed -e "s/{param1}/$param1/g" \ -e "s/{param2}/$param2/g" \ -e "s/{params}/$params/g" \ example.txt > example_modified.txt echo "替换完成,结果已保存到 example_modified.txt"
说明:
- 如果要直接修改原文件(原地替换),可以给
sed加上-i参数:- Linux系统:
sed -i -e "s/{param1}/$param1/g" ... example.txt - macOS系统:
sed -i '' -e "s/{param1}/$param1/g" ... example.txt
- Linux系统:
- 如果参数里包含
/这类特殊字符,可以替换sed的分隔符,比如用#:sed -e "s#{param1}#$param1#g"
内容的提问来源于stack exchange,提问作者naya
相关产品推荐
相关产品推荐

