如何通过另一个批处理文件更新一个批处理文件中的值

时间:2019-08-29 05:29:36

标签: batch-file

在BCP方法中,我需要从另一个批处理文件动态获取三个值(机器名称用户名密码)。

第一个文件如下:

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

这背后的需要是,如果我们在另一机器上运行这些文件,那么每个人唯一要做的就是更新并先运行 < / strong>文件,其中包含计算机名称,用户名和密码

我尝试了solution,但没有成功。

有人可以在这里帮我吗。 ?

1 个答案:

答案 0 :(得分:2)

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

1。通过参数传递字符串

Main.bat:

call "%~dp0Export.bat" "IN-L20054" "User" "Password"
call "%~dp0Export.bat" "Other Machine" "Other User" "Other Password"

Export.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。通过环境变量传递字符串

Main.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"

Export.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。通过文本文件传递字符串

在此示例中,竖线|用作定界符,如果不使用脱字符号^进行转义,则将其解释为重定向运算符。当然可以使用其他任何字符作为分隔符,例如;,或制表符。

(
    echo IN-L20054^|User^|Password
    echo Other Machine^|Other User^|Other Password
) >"%TEMP%\Export.tmp"
call "%~dp0Export.bat"
del "%TEMP%\Export.tmp"

Export.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 /?

另请参阅有关Using command redirection operators的Microsoft文章。