1

文字列内に部分文字列が含まれているかどうかを確認しようとしています。そうであれば、「if」条件を実行したくありません。

私の問題:文字列内に部分文字列があるかどうかをチェックするコードが機能していません。部分文字列が実際に文字列内に発生する場合、文字列内には発生しないと常に考えます。

部分文字列が文字列内に存在するかどうかをバッチで確認するにはどうすればよいですか?

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

あなたはほとんどそれを持っています。バッチ ファイル内の行の解析は左から右に実行されるため、2 つの %variable% 展開をネストする機会がないことに注意してください。それを解決する方法は、1 つの %normal% 展開と 1 つの !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 をインストールして、bash などの実際の POSIX/UNIX/LINUX シェルを使用します。CMD.EXE で利用できるものよりも、BASENAME と FILENAME と「grep」や「find」などのユーティリティを使用して、文字列とファイル パスをテストする方がはるかにうまくいくでしょう。また、適切なシェルでこれらすべてを実行する方法について、10 年以上前のスタックオーバーフローの例がたくさんあります。

于 2013-05-23T00:18:08.827 に答える