首页 > 解决方案 > 如何通过另一个批处理文件更新一个批处理文件中的值

问题描述

在 BCP 方法中,我需要从另一个批处理文件中动态获取三个值( Machine NameUserNamePassword )。

第一个文件看起来像:

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

这背后的需要是,如果我们在另一台机器上运行这些文件,每个人唯一需要做的就是使用机器名、用户名和密码更新和运行第一个文件

我尝试了解决方案,但没有成功。

有人可以帮我吗。?

标签: batch-file

解决方案


字符串可以通过参数或通过环境变量或通过文本文件从一个批处理文件传递到另一个批处理文件。

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 文章。


推荐阅读