1

我正在尝试检查字符串中是否出现子字符串。如果是这样,那么我不想执行“如果”条件。

我的问题:我检查字符串中是否出现子字符串的代码不起作用。它总是认为子字符串实际上不会出现在字符串中。

如何批量检查字符串中是否出现子字符串?

SET filePath="c:/users/abc/dir1/subdir"
SET excludeDir1="c:/users/abc/dir1"
SET excludeDir2="c:/users/abc/dir2"

REM // If the string excludeDir1 does not occur in filePath AND If the string excludeDir2 does not occur in filePath: continue
if /i NOT x%filePath:%excludeDir1%=%==x%filePath% if /i NOT x%filePath:%excludeDir2%=%==x%filePath% (
    REM // Do stuff
)
4

2 回答 2

3

你几乎拥有它。请记住,批处理文件中行的解析是从左到右执行的,因此没有机会嵌套两个 %variable% 扩展。解决它的方法是结合一个 %normal% 扩展和一个 !delayed! 扩张:

REM Next command is required in order to use Delayed !variable! Expansion
SETLOCAL EnableDelayedExpansion

SET filePath="c:/users/abc/dir1/subdir"
SET excludeDir1="c:/users/abc/dir1"
SET excludeDir2="c:/users/abc/dir2"

REM // If the string excludeDir1 does not occur in filePath AND If the string excludeDir2 does not occur in filePath: continue
if /i NOT "!filePath:%excludeDir1%=!" == "%filePath%" if /i NOT "!filePath:%excludeDir2%=!" == "%filePath%" (
    REM // Do stuff
)
于 2013-05-23T01:26:35.780 回答
1

使用 powershell 或安装 Cygwin 并使用真正的 POSIX/UNIX/LINUX shell,如 bash。使用 BASENAME 和 FILENAME 以及 'grep' 和 'find' 等实用程序测试字符串和文件路径的成功率比使用 CMD.EXE 可用的要好得多您还会发现 10 多年前的大量 stackoverflow 示例,这些示例说明了如何在适当的 shell 中完成所有这些工作。

于 2013-05-23T00:18:08.827 回答