检查字符串是否以分号结尾

zeu*_*300 1 cmd compare batch-file

我正在将文件路径添加到 Windows 上的 PATH 变量中。在某些情况下,现有的 PATH 似乎以分号结尾,有时则不然。因此,在添加路径之前我必须检查这一点,否则我可能会得到一个包含两个分号的 PATH 字符串。由于某种原因我不明白,有 ;; 在你的 PATH 中会产生问题。现在的问题是:如何检查字符串是否以分号结尾?举个例子,我尝试过:

set test_1=bla;
set test_2=%test_1:~-1%
if %test_2% EQU ^; echo hello
Run Code Online (Sandbox Code Playgroud)

但如果 test_2 包含分号,则不起作用。

Ger*_*ard 6

为什么要转义分号?我建议您通过打开 cmd 控制台并输入来运行 if 的帮助if /?

set "test_1=bla;"
if "%test_1:~-1%"==";" echo hello
Run Code Online (Sandbox Code Playgroud)

我们将变量和匹配项用双引号括起来,以消除任何可能出现的空格。所以本质上您现在正在匹配:

if ";"==";"
Run Code Online (Sandbox Code Playgroud)

这是完全匹配的。

然后,作为旁注。您有可能会循环执行此操作。如果是这种情况,您需要从 cmd 控制台enabledelayedexpansion了解更多相关信息setlocal /?

假设somefilename.txt有以下文本:

blah;
blahblah
bla;

@echo off
setlocal enabledelayedexpansion
for /f %%I in (somefilename.txt) do ( 
    set "test_1=%%I"
    if "!test_1:~-1!"==";" echo hello
)
Run Code Online (Sandbox Code Playgroud)

将回显:

hello
hello
Run Code Online (Sandbox Code Playgroud)

;因为里面只有 2 个项目。但请注意替换为%!告知delayedexpansion应扩展哪些变量。