如果在批处理文件中声明

时间:2017-06-10 00:42:11

标签: batch-file

我需要在批处理文件中有一个IF语句,它根据FileName采取不同的操作。这个动作并不重要,因为我处理了那个部分。我无法弄清楚如何让我的IF语句发挥作用。我试图将FileName子串,但无法使其工作。简而言之,如果FileName具有" Orders"那么我想做一件事。如果它有"配件"在名字里。

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

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

提前致谢

感谢Magoo的回复。我按照你的表现做了,但不幸的是它仍然无法奏效。在这个批处理文件中,我唯一拥有的就是这3行,从以下开始:set" name =%1"。仍然没有运气。

我还试图查看文件"是否包含"我尝试子串的话,但我无法解决我的sqlcmd线问题。我按照这个例子。我可以得到它来回应正确的东西,所以我知道它正在工作,但它似乎并没有触发(sqlcmd ...)部分。如果sqlcmd部分是批处理文件中唯一的部分,它每次都能完美运行。批处理文件:查找子字符串是否在字符串中(不在文件中)

保罗我也尝试了你的建议,我得到了同样的结果;它并没有解雇我的sqlcmd。就像我说的那样,这个sqlcmd已经工作多年了,并且如果它是bat文件中唯一的东西,它将继续工作。一旦我添加IF,它就会停止工作。

3 个答案:

答案 0 :(得分:0)

元变量不支持子字符串 - 您需要将值传输到普通环境变量。

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

应该有效,假设这些隔离的代码行包含在子程序中,其中名称作为第一个参数提供。

如果引用if的一个参数,则两者都必须

答案 1 :(得分:0)

尝试类似:

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

答案 2 :(得分:0)

没关注这个问题 - 我使用的是Powershell,它就像一个冠军。感谢所有的回复。