2016-08-16 13 views
0

私はSQLクエリファイルを実行し、結果をプリンタにコピーする非常に単純なバッチファイルを持っています。問題は、クエリの結果が0行であっても印刷されることです。データがある場合にはどうすれば印刷できますか?バッチファイルの条件付き印刷

cd stock 
sqlcmd -i testquery.sql -S localhost -U User -P password -o testresults.txt 
copy testresults.txt \\printserver\share 
sqlcmd -i ems_update.sql -S localhost -U User -P password 
del c:\stock\testresults.txt 
exit 

[OK]を、これは私が今持っているものです。

cd c:\stock 
sqlcmd -i testquery.sql -S localhost -U User -P password -o testresults.txt 
@find /c /i "0 rows" "C:\stock\testresults.txt" > NUL 
if %ERRORLEVEL% EQU 1 (
pause 
) else (
copy c:\stock\testresults.txt \\printserver\share) 
pause 
sqlcmd -i ems_update.sql -S localhost -U User -P password 

私は今、実行するためのコピーコマンドを取得することはできません。私は何が欠けているのですか?

if [ ! -s ./testresults.txt ] ; then 
    rm ./testresults.txt 
    # or do something else 
else 
    copy testresults.txt \\printserver\share 
fi 

答えて

0

はあなたが0のデータを持って知っているファイルを取る: - 感謝

+0

バッチ 'if'比較は文字列値のみをチェックするので、' if'文は時間の100%になります。バッチの変数も '%this%'のように呼び出されます。 – SomethingDark

+0

'set var_name = type contents.txt'は、ファイルの内容を文字列にします。 – MotKohn

+0

いいえ、コマンドの出力を処理するには 'for'ループが必要です。 'for/f" delims = "%contents %% A in( 'type contents.txt')do set var_name = %% A'は変数をファイルの内容に設定します。 – SomethingDark

0

ジャストアイデアファイルのサイズが、それはこのようなものになるだろうバッシュ0である場合は、確認することができます。その後
for /f "delims=" %%A in ('type nodata.txt') do set nodata=%%A
その後
for /f "delims=" %%A in ('type testresults.txt') do set test_result=%%A

if not %nodata%==%test_result% copy testresults.txt \printserver\share
同じ正確にデータファイルが作成されていない場合にのみ、ノータイムスタンプのように、動作します。それがない場合には、ファイル内の語句や0が見つからない場合は%errorlevel%==1を返し
または
使用find

+0

この問題は、クエリがファイルに書き込むために0行を返しても、ファイルサイズが1kbであることにあります。私がデータを返している結果は、しばしば1kbだけです。 – user1879417