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

Batch file 检查字符串是否以分号结尾,batch-file,cmd,compare,Batch File,Cmd,Compare,我正在Windows上向路径变量添加文件路径。在某些情况下,现有路径似乎以分号结尾,有时不以分号结尾。因此,我必须在添加路径之前检查这一点,否则我可能会得到一个包含两个分号的路径字符串。由于某种原因,我不明白,有;;在你的道路上会产生问题。现在的问题是:如何检查字符串是否以分号结尾?举个例子,我试着: set test_1=bla; set test_2=%test_1:~-1% if %test_2% EQU ^; echo hello 但是,如果test_2包含分号,则这不起作用。为什么要

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

set test_1=bla;
set test_2=%test_1:~-1%
if %test_2% EQU ^; echo hello

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

为什么要转义分号?我建议您通过打开cmd控制台并键入
if/?

set "test_1=bla;"
if "%test_1:~-1%"==";" echo hello
我们将变量和匹配项用双引号括起来,以消除任何可能出现的空白。因此,基本上您现在正在匹配:

if ";"==";"
这完全是一场比赛

然后,作为旁注。你有可能在一个循环中完成这项工作。如果是这种情况,您需要从cmd控制台
启用DelayedExpansion
以了解更多有关此操作的信息

假设
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
)
将回应:

hello
hello

因为只有两个项目有
在其中。但请注意,将
%
替换为
告诉
delayedexpansion
哪些变量应该展开。

为什么要转义分号?我建议您通过打开cmd控制台并键入
if/?

set "test_1=bla;"
if "%test_1:~-1%"==";" echo hello
我们将变量和匹配项用双引号括起来,以消除任何可能出现的空白。因此,基本上您现在正在匹配:

if ";"==";"
这完全是一场比赛

然后,作为旁注。你有可能在一个循环中完成这项工作。如果是这种情况,您需要从cmd控制台
启用DelayedExpansion
以了解更多有关此操作的信息

假设
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
)
将回应:

hello
hello

因为只有两个项目有
在其中。但请注意,将
%
替换为
告诉
delayedexpansion
哪些变量应该展开。

尝试
设置“test_1=bla;”
后接
如果“%test_1:~-1%”==“;”Echo hello
。尝试
设置“test_1=bla;”
后接
如果“%test_1:~-1%”==“;”Echo hello
@zeus300,在上述示例中,请使用我在评论中提供的语法,即设置“VariableName=VariableValue”。这是一个很好的实践,可以保护字符并防止错误。一个错误示例是,如果您意外地在变量值的末尾包含一个空白字符,它将不可见,但会被指定为最后一个字符,从而破坏您的
if
比较!为了满足你的好奇心,我绝望地避开了分号。我尝试了一些不同的方法,这只是其中之一。我想可能分号被当作一个特殊的字符。但我的问题现在得到了回答,一切都很好。多谢各位@zeus300,在上面的示例中,请使用我在注释中提供的语法,即设置“VariableName=VariableValue”。这是一个很好的实践,可以保护字符并防止错误。一个错误示例是,如果您意外地在变量值的末尾包含一个空白字符,它将不可见,但会被指定为最后一个字符,从而破坏您的
if
比较!为了满足你的好奇心,我绝望地避开了分号。我尝试了一些不同的方法,这只是其中之一。我想可能分号被当作一个特殊的字符。但我的问题现在得到了回答,一切都很好。非常感谢你!