【问题标题】:saving output as variable将输出保存为变量
【发布时间】:2013-06-11 20:31:27
【问题描述】:

我正在编写一个批处理脚本,并试图将命令的部分输出保存为变量。我当前的脚本要求用户输入站点代码(例如 853),它需要该代码并使用它来查询 sql 数据库。我使用的命令如下:

sqlcmd -S"localhost\SQLONESOURCE" -Uusername -Pmypassword -dOneSource -Q"select AdmSiteID from [10.33.144.114].onesource.dbo.admsites where siteid='%sitecode%'"

当这个命令运行时,我得到以下输出:
AdmSiteID
------------------------------------
AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE

(1 rows affected)

我只想获取 AdmSiteID (AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE) 并将其保存为变量。它将始终采用具有相同数量的字符和破折号的格式。

【问题讨论】:

    标签: windows variables batch-file scripting


    【解决方案1】:

    此批处理代码从您的 sqlcmd 输出中获取第三行:

    for /F "skip=2" %%a in ('sqlcmd -S"localhost\SQLONESOURCE" -Uusername -Pmypassword -dOneSource -Q"select AdmSiteID from [10.33.144.114].onesource.dbo.admsites where siteid='%sitecode%'"') do (
       set thirdLine=%%a
       goto continue
    )
    :continue
    echo %thirdLine%
    

    【讨论】:

    • 好的,谢谢!我不知道为什么在我为 for 命令找到的任何文档中都没有看到“skip”参数。
    【解决方案2】:

    首先要做的是确保您的 SQLCMD 输出包含某种可以搜索的唯一文本。例如,您可以按如下方式修改您的查询:

    "select 'FOO~' + AdmSiteID + '~' from [10.33.144.114].onesource.dbo.admsites where siteid='%sitecode%'"
    

    然后通过将 -o %OUTPUT_FILE% 添加到您的 SQLCMD.EXE 行,将您的 SQLCMD 输出写入文件,其中 %OUTPUT_FILE% 已经定义。 p>

    然后结合使用 forfindstr.exe 将文件分开:

    for /f "tokens=2 delims=~" %%D in ('%SystemRoot%\System32\findstr.exe /l /c:"FOO~" %OUTPUT_FILE%') do set YOUR_VARIABLE=%%D
    

    这还没有经过测试,但我知道这个理论是合理的。如果它不起作用,并且您正在努力修复它,请告诉我,我会花更多时间来解决它。

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 2013-04-21
      相关资源
      最近更新 更多