Wie überprüfe ich, ob die drei letzten Zeichen einer Variablen mit einer anderen Variablen übereinstimmen?

1746
Tom

Ich habe %var1%und%var2%

var1="UserInput" var2=file.log 

Wenn ein Benutzer %var1%als "file.txt" eingibt, wie kann ich (wenn möglich) nur die letzten drei Zeichen überprüfen (oder das Dateiformat, wenn dies möglich ist), um festzustellen, ob es mit %var2%den letzten drei Zeichen oder dem Dateiformat übereinstimmt ?

Eine andere Methode, die dasselbe tut, ist ebenfalls willkommen (aber die Benutzereingabevariable muss vorhanden sein)

4
Scheint wie ein [XY-Problem] (https://meta.stackexchange.com/questions/66377/what-is-the-xy- problem) user2397282 vor 6 Jahren 4

2 Antworten auf die Frage

7
dbenham

Wenn Sie eine feste Anzahl von Zeichen prüfen, sollten Sie die letzten 4 Zeichen überprüfen, ansonsten wird "file.Log" mit "file.myLog" übereinstimmen.

Die beste Option ist jedoch, die tatsächliche Erweiterung unabhängig von der Länge zu erhalten:

@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

Wie überprüfe ich, ob die drei letzten Zeichen einer Variablen mit einer anderen Variablen übereinstimmen?

Verwenden Sie die variable Teilstringsyntax, um die letzten 3 Zeichen jeder Variablen zu extrahieren.

Beispiel Batchdatei:

@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 

Lesen Sie weiter

Es hat keine Auswirkungen auf die Funktionalität Ihrer Antwort, aber warum haben Sie "enabledelayedexpansion" festgelegt, wenn Sie keine Erweiterung von "! Var!" Verwenden? AFH vor 6 Jahren 4
@AFH Gewohnheit. Ich habe es entfernt, um Verwirrung zu vermeiden :) DavidPostill vor 6 Jahren 4
Während Ihr Code die Frage beantwortet, löst er das Problem nicht wirklich. Beispiele, bei denen es nicht richtig funktioniert: list.txt, vs listet, stuff.docx vs stuff.ocx, `file1.o` vs` file2.o`. Dies sind alles gültige Erweiterungen für tatsächliche Dateiformate, nur `listxt 'ist ein Dateiname ohne Dateinamenerweiterung. gronostaj vor 6 Jahren 4