首页 > 解决方案 > 在找到“-1”或任何其他数字“-[0-9]”后批量删除部分字符串

问题描述

我得到了一个在每一行都包含一个字符串的文件,如下所示:

fruit-apple-1.5.6
vegtable-sla-mc5-6.5-16515
extra-huh-9.5-511-515
extra-3.2

我正在对其进行迭代,并希望它在 find "-" + any number "-0","-1","-2","-9",...

所以输出应该是

fruit-apple
vegtable-sla-mc5
extra-huh
extra

这是我拥有的代码,但它只能与“-”一起使用,我不能将它组合起来,所以它需要“-”+任何数字,如“-1”、“-5”、“-2”、...

for /f "delims=|" %%A in ("!fileNameCheck:-=|!") do (
echo stripped string = %%A
)

我认为不需要完整的代码,但如果你在下面需要它

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set "RawPath=%~dp0"


FOR /F "USEBACKQ TOKENS=*" %%M IN ("%RawPath%/mods") DO (
REM for %%f in (*.jar) do (
    Set "fileNameCheck=%%M"
    for /f "delims=|" %%A in ("!fileNameCheck:-=|!") do (
        Echo [46m%%A[0m
        if exist "%~dp0%%A*.jar" (
            REM echo [32mFound %%A "%~dp0%%A*.jar"[0m
            if exist "%~dp0%%M" (
                REM echo [42mUp to Date[0m [32m%%A "%~dp0%%M"[0m
            ) else (
                for %%j in (*.jar) do (
                    echo %%j |find "%%A" >nul
                    if not errorlevel 1 (
                        echo [41mDifferent Version[0m [31m%%j [0m[90mNewer version[0m [32m%%M[0m 
                    )
                    
                )
                
            )
        ) else (
            REM echo [31mMissing %%A[0m
        )
    )
)
pause

标签: batch-filewindows-10

解决方案


一种方法是替换-with\然后使用变量替换%%~ni从字符串中删除部分。我们只需要从字符串中删除第一次和最后一次出现。findstr将确定字符串的结尾需要-num.*

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%A in ('dir /b /s *.jar ^| findstr /RC:"-[0-9].*$"') do (
        set "line=%%~nxA"
        for %%i in ("!line:-=\!") do set "final=%%~pi"
        set "final=!final:~0,-1!-"
        echo !final! | findstr /RC:"\\[0-9].*$" >nul 2>&1
        if !errorlevel! equ 0 (
            for %%s in ("!final!") do set "final=%%~ps"
            set final=!final!
        )
        set "final=!final:~0,-1!"
        set "final=!final:~1!"
        echo !final:\=-!
)

编辑后的代码应-根据您的评论示例处理其他内容name-subname-10.5-55.5


推荐阅读