2017-07-13 11 views
1

データベースからのフィールドの値をカンマで区切ったリストを取得します。このリストは空白になることがあります。リストが空白であるかどうかを確認してから、何かをする必要があります。リストが空白でない場合は、別の操作を行います。カンマで区切られたリストが空白(空白)かどうかをチェックするときのエラー

問題は、リストが空白かどうかを確認するときにエラーが発生していることです。ここにコードがあります。私は、コードの始めに値がデータベースから来ていることをシミュレートしました。

これまでに試したことは次のとおりです。VendorStoresのリストが空白(空白)の場合は、1つの操作を行います。それ以外は別の行動を取る。 VendorStoresに複数の値(コンマ区切り)があり、それが空白と比較されているときにエラーが発生しました。だから私は値を数え、そのカウントを使って決定を下ろそうとしています。しかし、私は同じ問題を抱えています。 VendorStoresが空白の場合、forループは2つの値、つまり1)",=" 2)""と考えています。なぜこれが当てはまるのか分かりません。このコマンドライン上echo onの行を挿入してと@echo offそれができるとの行をの括弧を閉じた後

for %%a in ("%vendorstores:,=" "%") do (

:: Intention of the script is as follows: 
:: If VendorStores list is blank, take one action 
:: If VendorStores list has values, take another action 

@echo off 
:: Set values for VendorStores 
:: set vendorstores=123,234,345 
:: Set VendorStores to blank 
set vendorstores= 
echo list = "%vendorstores%" 
:: Remove any blank spaces from VendorStores 
set vendorstores=%vendorstores: =% 
set /a c=0 
echo c=%c% 
SETLOCAL EnableDelayedExpansion 
for %%a in ("%vendorstores:,=" "%") do (
    if [%%a] NEQ [] (
     set /a c=c + 1 
     echo VendorStore is %%a 
    ) 
    echo c=!c! 
) 
echo c=!c! 
if [!c!] EQU [0] (
    echo c is equal to Zero 
) else (
    echo c is greater than Zero 
) 
echo c=!c! 
endlocal 
+0

で、タグを追加してください:ここでは – Sergii

+0

バッチファイルです。 – TJM

+0

バッチファイル - プログラミング言語またはスクリプトではありません。タグを指定すると、専門分野に応じて質問をフィルタリングする方が便利です。 – Sergii

答えて

0

間違った結果が FORコマンドラインからですそれがなぜ失敗するのかを簡単に見ることができます。

右のコマンドラインは次のようになります。

for %%a in (%vendorstores%) do (

しかし、この FORループを使用すると、すべてで定義されていない環境変数vendorstoresの場合には良くありません。ここ

Test.batでバッチファイルのために簡略化した例である次のようにプロンプ​​トウィンドウコマンド内から実行することができる

@echo off 
set "VendorStores=%~1" 
if not defined VendorStores goto EmptyList 
set "VendorStores=%VendorStores: =%" 
if not defined VendorStores goto EmptyList 
if "%VendorStores:,=%" == "" goto EmptyList 
echo List is: %VendorStores% 
goto :EOF 

:EmptyList 
echo The list is empty. 

このバッチファイル:

Test.bat 
Test.bat ,,,, 
Test.bat ", , , ," 
Test.bat " 123, 234, 345 " 
Test.bat "376,983,305,253" 

出力それら5にバッチファイルの実行は、予想される出力の5倍です。それはPHPやブッシュ

@Echo Off 
Set "VendorStores=" 
For /F "EOL=, Delims=, " %%A In ("%~1") Do Set "VendorStores=%%A" 
If Not Defined VendorStores (Echo VendorStores is blank 
) Else Echo VendorStores has one or more values 
+0

Mofi、ありがとう、トン!私が欠けていたのは、 "ベンダーストアが定義されていない場合"でした。区切られた文字列からスペースを削除した後、カンマの削除を実行する前にこのステートメントを追加しました。ここに私がしたことがあります。 – TJM

0
:: Intention of the script is as follows: 
:: If VendorStores list is blank, take one action 
:: If VendorStores list has values, take another action 

@echo off 
:: Set values for VendorStores 
:: set vendorstores=123,234,345 
:: Set VendorStores to blank 
set vendorstores= 
echo list = "%vendorstores%" 
:: Remove any blank spaces from VendorStores 
set vendorstores=%vendorstores: =% 

::::If there is any value in StoreCSV, then remove any comma delimiters from it as the "if" statement does not like commas 
if defined vendorstores (
set "vendorstores=%vendorstores:,=%" 
) 

SETLOCAL EnableDelayedExpansion 

if [%vendorstores%] EQU [] (
    echo VendorStores is blank 
) else (
    echo VendorStores has one or more values 
) 

endlocal 
+0

'[%vendorstores%] EQU []'を使用することはお勧めできません。 '['と ']'は特別な意味を持ちません。それらは演算子 'EQU'の左右の2つの文字列を比較して比較する必要がある2文字です。 'if"%vendorstores% "EQU" "'の使用法を改善しました。二重引用符は、__IF__コマンドによって行われる文字列比較にも含まれます。しかし、二重引用符で囲まれた引数の中では、 '&'、 '|'、 '<' or '> 'のようなコマンドライン演算子は、演算子としてではなくリテラル文字として解釈されます。これはしばしば重要な違いになります。 – Mofi

0

は別のオプションですか?
関連する問題