batch-file - 如何通过另一个批处理文件更新一个批处理文件中的值
问题描述
在 BCP 方法中,我需要从另一个批处理文件中动态获取三个值( Machine Name、UserName、Password )。
第一个文件看起来像:
MACHINE_NAME=IN-L20054
DB_UserName=sa
DB_Password=sa
pause
第二个文件看起来像:
bcp.exe ExportDB.dbo.AddressCountry OUT "C:\Temp\AddressCountry.bcp" -S "MACHINE_NAME" -U "DB_UserName" -P "DB_Password" -n -q
bcp.exe ExportDB.dbo.CI OUT "C:\Temp\CI.bcp" -S "MACHINE_NAME" -U "DB_UserName" -P "DB_Password" -n -q
pause
这背后的需要是,如果我们在另一台机器上运行这些文件,每个人唯一需要做的就是使用机器名、用户名和密码更新和运行第一个文件
我尝试了解决方案,但没有成功。
有人可以帮我吗。?
解决方案
字符串可以通过参数或通过环境变量或通过文本文件从一个批处理文件传递到另一个批处理文件。
1. 通过参数传递字符串
主要.bat:
call "%~dp0Export.bat" "IN-L20054" "User" "Password"
call "%~dp0Export.bat" "Other Machine" "Other User" "Other Password"
导出.bat:
bcp.exe ExportDB.dbo.AddressCountry OUT "C:\Temp\AddressCountry.bcp" -S "%~1" -U "%~2" -P "%~3" -n -q
bcp.exe ExportDB.dbo.CI OUT "C:\Temp\CI.bcp" -S "%~1" -U "%~2" -P "%~3" -n -q
2.通过环境变量传递字符串
主要.bat:
set "MACHINE_NAME=IN-L20054"
set "DB_UserName=User"
set "DB_Password=Password"
call "%~dp0Export.bat"
set "MACHINE_NAME=Other Machine"
set "DB_UserName=Other User"
set "DB_Password=Other Password"
call "%~dp0Export.bat"
导出.bat:
bcp.exe ExportDB.dbo.AddressCountry OUT "C:\Temp\AddressCountry.bcp" -S "%MACHINE_NAME%" -U "%DB_UserName%" -P "%DB_Password%" -n -q
bcp.exe ExportDB.dbo.CI OUT "C:\Temp\CI.bcp" -S "%MACHINE_NAME%" -U "%DB_UserName%" -P "%DB_Password%" -n -q
3.通过文本文件传递字符串
在此示例中,竖线|
用作分隔符,如果不使用脱字符进行转义,则将其解释为重定向运算符^
。当然可以使用任何其他字符作为分隔符,例如;
or,
或制表符。
(
echo IN-L20054^|User^|Password
echo Other Machine^|Other User^|Other Password
) >"%TEMP%\Export.tmp"
call "%~dp0Export.bat"
del "%TEMP%\Export.tmp"
导出.bat:
for /F "usebackq tokens=1-3 delims=|" %%I in ("%TEMP%\Export.tmp") do (
bcp.exe ExportDB.dbo.AddressCountry OUT "C:\Temp\AddressCountry.bcp" -S "%%~I" -U "%%~J" -P "%%~K" -n -q
bcp.exe ExportDB.dbo.CI OUT "C:\Temp\CI.bcp" -S "%%~I" -U "%%~J" -P "%%~K" -n -q
)
4.两个批处理文件合并在一起
for %%# in ("IN-L20054|User|Password" "Other Machine|Other User|Other Password") do (
for /F "tokens=1-3 delims=|" %%I in (%%#) do (
bcp.exe ExportDB.dbo.AddressCountry OUT "C:\Temp\AddressCountry.bcp" -S "%%~I" -U "%%~J" -P "%%~K" -n -q
bcp.exe ExportDB.dbo.CI OUT "C:\Temp\CI.bcp" -S "%%~I" -U "%%~J" -P "%%~K" -n
)
)
要了解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
call /?
del /?
echo /?
for /?
set /?
另请参阅有关使用命令重定向运算符的 Microsoft 文章。
推荐阅读
- oop - 当一个参与者有两个不同的场景时,如何呈现用例图?(完全相同的参与者)
- sql-server - 从 VS2019 IDE 调试 SQL Server 存储过程
- r - “二进制运算符的非数字参数”执行 R 脚本,Microsoft Azure
- discord.js - Discord.js TypeError:无法读取未定义的属性“get”
- single-sign-on - 无法为方法 [KEYCLOAK] 配置身份验证器
- javascript - Express 中间件仅用于处理 React 和 Python 之间的请求
- python - 需要正则表达式模式来解析字符串中相似的元素
- python-3.x - Selenium:无法关闭窗口警报
- excel - 连接如果,在一个范围内
- twitter-bootstrap - 折叠时引导导航栏菜单不下拉