2017-06-10 9 views
1

ファイル名に基づいて異なるアクションをとるバッチファイルにIF文を入れる必要があります。私はその部分を処理しているので、アクションは重要ではありません。私が理解できないことは、IF文をどのように動作させるかです。私はFileNameを部分文字列にしようとしましたが、それを動作させることはできません。要するに、FileNameに "Orders"がある場合、もう一つは "Accessories"という名前が付いている場合は別のものを実行したいと思います。返信マグーを事前にIfバッチファイル内の文

IF "%1:~0,18%" == MyFileName1_Orders (
    sqlcmd MyCommand) 

IF "%1:~0,23%" == MyFileName1_Accessories (  
    sqlcmd MyCommand) 

おかげで

感謝。私はあなたが示したようにしましたが、残念ながらそれはまだ動作しません。このバッチファイルでは、私が持っている唯一のものは次の3行です:set "name =%1"で始まります。まだ運がありません。

ファイルに「substring」しようとしている単語が「含まれています」が表示されていましたが、sqlcmd行を起動できません。私はこの例に従った。私はそれが働いていることを知っているので、正しいものをエコーアウトすることができますが、(sqlcmd ...)の部分を起動しないようです。 sqlcmdの部分がバッチファイル内の唯一のものだった場合、毎回完璧に動作します。バッチファイル:部分文字列が文字列内にあるかどうかを調べる(ファイルではない)

Paul私はあなたの提案を試みたが、私は同じ結果を得た。私のsqlcmdは起動しません。そして、私が言ったように、このsqlcmdは何年もうまく働いていて、batファイル内の唯一のものならば動作し続けます。私はIFを追加するとすぐに、それは動作を停止します。

+2

条件の両側は、両方が二重引用符で囲まれている場合にのみ一致します。さらに、変数はアルファベット文字でなければなりません。 – Compo

答えて

0

ネヴァーマインド - 私の代わりにPowerShellを使用し、それはチャンピオンのように動作します:

そしてifの一つのパラメータが引用されている場合は、その両方が

0

メタ変数では、サブリングがサポートされていません。通常の環境変数に値を転送する必要があります。

set "name=%1" 
IF "%name:~0,18%" == "MyFileName1_Orders" (sqlcmd MyCommand) 

これらの孤立したコード行が、名前が最初のパラメータとして提供されているサブルーチンに含まれていると仮定して、動作するはずです。この質問に

set fn=%~1 
if not "%fn:orders=%" == "%fn%" (sqlcmd MyCommand) 
if not "%fn:accessories=%" == "%fn%" (sqlcmd MyCommand) 
0

でなければならないようなものを試してみてください。すべての返信をありがとう。

+1

最初のifに '%'がありません;) – geisterfurz007