batch-file - 在找到“-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
解决方案
一种方法是替换-
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
推荐阅读
- php - Google Analytics Reporting API 无法获得唯一页面浏览量
- java - 获取存款的所有者(JPA 存储库)
- c++ - 在 C++ 类中初始化二维数组
- javascript - JavaScript 通过引用返回
- r - 减去一列中的值并更改另一列
- python - 将文本文件转换为列表列表
- python-3.x - 为什么我的程序没有读取其他变量?
- c++ - 为什么程序会增加 x 和 y 的值,即使它们更大,那么它们应该是?
- python - 如何排除包含常量字符串的正则表达式匹配
- swiftui - ARKit3 和 swiftUI 中的 ARWorldTrackingConfiguration-DetectImages