0

私はバッチ スクリプトに取り組んでおり、コマンドの出力の一部を変数として保存しようとしています。私の現在のスクリプトでは、ユーザーがサイト コード (例: 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) を取得し、それを変数として保存したいだけです。常に同じ数の文字とダッシュを持つその形式になります。

4

2 に答える 2

2

このバッチ コードは、sqlcmd の出力から 3 行目を取得します。

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%
于 2013-06-11T21:13:22.543 に答える
0

最初に行うことは、SQLCMD 出力に、検索可能な一意のテキストが含まれていることを確認することです。たとえば、クエリを次のように変更できます。

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

次に、 %OUTPUT_FILE%が既に定義されているSQLCMD.EXE 行に-o %OUTPUT_FILE%を追加して、SQLCMD 出力をファイルに書き込みます。

次に、forfindstr.exeを組み合わせて使用​​して、ファイルを分解します。

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

これはテストされていませんが、理論が正しいことはわかっています。それが機能せず、修正に苦労している場合はお知らせください。さらに時間をかけて修正します。

于 2013-06-11T21:04:36.963 に答える