¿Cómo verifico si los tres últimos caracteres de una variable coinciden con otra variable?

4

Tengo %var1%y%var2%

var1="UserInput"
var2=file.log

Si un usuario escribe %var1%"file.txt", ¿cómo puedo (si es posible) verificar solo los tres últimos caracteres (o el formato de archivo si es posible) para ver si coincide con %var2%los tres últimos caracteres o el formato de archivo?

Otro método que hace lo mismo también es bienvenido (pero la variable de entrada del usuario debe estar allí)

Tom
fuente
Parece un problema XY
user2397282

Respuestas:

7

Si va a verificar un número fijo de caracteres, debe verificar los últimos 4, de lo contrario "file.Log" coincidirá con "file.myLog".

Pero la mejor opción es obtener la extensión real, independientemente de la longitud:

@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
dbenham
fuente
5

¿Cómo verifico si los tres últimos caracteres de una variable coinciden con otra variable?

Use la sintaxis de subcadena variable para extraer los últimos 3 caracteres de cada variable.

Ejemplo de archivo por lotes:

@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

Otras lecturas

DavidPostill
fuente
No afecta la funcionalidad de su respuesta, pero ¿por qué lo ha configurado enabledelayedexpansioncuando no usa ninguna !var!expansión?
AFH
@AFH Fuerza de hábito. Lo he eliminado para evitar confusiones :)
DavidPostill
Si bien su código responde la pregunta, en realidad no resuelve el problema. Ejemplos en los que no va a funcionar correctamente: list.txtvs listxt, stuff.docxvs stuff.ocx, file1.ovs file2.o. Todas estas son extensiones válidas para formatos de archivo reales, solo listxtes un nombre de archivo compuesto sin extensión.
gronostaj