題 如何檢查變量的最後三個字符是否與另一個變量匹配?


我有 %var1% 和 %var2%

var1="UserInput"
var2=file.log

如果用戶輸入 %var1% 作為“file.txt”,我怎麼能(如果可能的話)只檢查最後三個字符 (如果可能的話,還是文件格式) 看它是否匹配 %var2%最後三個字符或文件格式?

另一種做同樣事情的方法也是受歡迎的(但用戶輸入變量 必須 在那裡)


4
2017-10-21 17:15


起源


好像是一個 XY問題 - user2397282


答案:


如果要檢查固定數量的字符,則應檢查最後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

7
2017-10-21 17:51





如何檢查變量的最後三個字符是否與另一個變量匹配?

使用變量子串語法來提取每個變量的最後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

進一步閱讀


5
2017-10-21 17:39



它不會影響您的答案功能,但為什麼要設置 enabledelayedexpansion 當你不使用任何 !var! 擴張? - AFH
@AFH習慣的力量。我刪除它以避免任何混亂:) - DavidPostill♦
雖然您的代碼回答了問題,但它並沒有真正解決問題。它無法正常工作的示例: list.txt VS listxt, stuff.docx VS stuff.ocx, file1.o VS file2.o。這些都是實際文件格式的有效擴展 listxt 是一個免費的無擴展名文件名。 - gronostaj