Как проверить, соответствуют ли три последних символа переменной другой переменной?

1139
Tom

У меня есть %var1%и%var2%

var1="UserInput" var2=file.log 

Если пользователь вводит %var1%«file.txt», как я могу (если возможно) проверить только три последних символа (или формат файла, если это возможно), чтобы увидеть, соответствует ли он %var2%трем последним символам или формату файла?

Также приветствуется другой метод, который делает то же самое (но там должна быть переменная пользовательского ввода )

4
Похоже на [XY Проблема] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) user2397282 6 лет назад 0

2 ответа на вопрос

7
dbenham

Если вы собираетесь проверить фиксированное количество символов, то вам следует проверить последние 4, иначе «file.Log» будет соответствовать «file.myLog».

Но лучший вариант - получить фактическое расширение независимо от длины:

@echo off setlocal set "var1=file.Log" set "var2=file.myLog"  :: Option 1 using FOR loops for %%A in ("%var1%") do for %%B in ("%var2%") do if "%%~xA"=="%%~xB" ( echo Match ) else ( echo No Match )  : Option 2 using CALL parameters call :matchExtension "%var1%" "%var2%" &&echo Match||echo No Match exit /b  :matchExtension file1 fil2 --> returns 0 (success) if match, 1 (error) if no match if "%~x1"=="%~x2" exit /b 0 exit /b 1 
5
DavidPostill

Как проверить, соответствуют ли три последних символа переменной другой переменной?

Используйте синтаксис подстроки переменных, чтобы извлечь последние 3 символа каждой переменной.

Пример пакетного файла:

@echo off setlocal set /p var1="UserInput: " set var1last3=%var1:~-3% set var2=file.log set var2last3=%var2:~-3% if %var1last3% == %var2last3% ( echo Match ) else ( echo No Match ) endlocal 

Дальнейшее чтение

Это не влияет на функциональность вашего ответа, но почему вы установили `enabledelayedexpansion`, когда не используете никаких расширений`! Var! `? AFH 6 лет назад 0
@AFH Сила привычки. Я удалил его, чтобы избежать путаницы :) DavidPostill 6 лет назад 0
Хотя ваш код отвечает на вопрос, он на самом деле не решает проблему. Примеры, где это не будет работать правильно: `list.txt` против` listxt`, `stuff.docx` против` stuff.ocx`, `file1.o` против` file2.o`. Все это допустимые расширения для актуальных форматов файлов, только `listxt` - это составленное имя файла без расширения. gronostaj 6 лет назад 0