Batch file 批处理文件中的If语句

Batch file 批处理文件中的If语句,batch-file,Batch File,我需要在批处理文件中有一个IF语句,根据文件名执行不同的操作。行动并不重要,因为我已经处理了那部分。我不明白的是如何让我的IF语句起作用。我试图给文件名添加子字符串,但无法使其工作。简而言之,如果文件名中有“订单”,我想做一件事,如果文件名中有“附件”,我想做另一件事 IF "%1:~0,18%" == MyFileName1_Orders ( sqlcmd MyCommand ) IF "%1:~0,23%" == MyFileName1_Accessories (

我需要在批处理文件中有一个IF语句,根据文件名执行不同的操作。行动并不重要,因为我已经处理了那部分。我不明白的是如何让我的IF语句起作用。我试图给文件名添加子字符串,但无法使其工作。简而言之,如果文件名中有“订单”,我想做一件事,如果文件名中有“附件”,我想做另一件事

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

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

谢谢你的回复。我照你说的做了,但不幸的是它仍然不起作用。在这个批处理文件中,我现在只有这3行,以:set“name=%1”开头。还是不走运

我还试图查看该文件是否“包含”了我试图作为子字符串的单词,但我无法让它从我的sqlcmd行中跳出。我遵循这个例子。我可以让它回显正确的内容,这样我就知道它在工作,但它似乎没有触发(sqlcmd…)部分。如果sqlcmd部分是批处理文件中唯一的内容,那么它每次都能完美地工作。批处理文件:查找子字符串是否在字符串中(不在文件中)


保罗我也尝试过你的建议,我也得到了同样的结果;它不会触发我的sqlcmd。就像我说的,这个sqlcmd已经运行了好几年了,如果它是bat文件中唯一的东西,它还会继续工作。一旦我添加了IF,它就会停止工作。

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

set "name=%1"
IF "%name:~0,18%" == "MyFileName1_Orders" ( sqlcmd MyCommand )
假设这些独立的代码行包含在一个子例程中,其中名称作为第一个参数提供


如果引用了
的一个参数,则两个参数都必须是元变量不支持子字符串-您需要将该值转移到普通环境变量

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 )
尝试以下方法:

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

在这个问题上没关系-我使用了Powershell,它就像一个冠军。谢谢你的回复。

别提这个问题-我用了Powershell,它就像冠军一样工作。感谢您的回复。

只有在条件的两边都用双引号括起来时,它们才会匹配。另外,变量应该是字母字符。只有当它们都用双引号括起来时,条件的两边才会匹配。另外,变量应该是字母字符。我认为您在第一个if;)中缺少了一个
%
)我认为您在第一个if;)中缺少了一个
%