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 包含分号,则不起作用。
为什么要转义分号?我建议您通过打开 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应扩展哪些变量。