批处理文件正则表达式以从文件名中获取特定编号



我有一个文件名

pp-sssss-iiii-12.0.111.22_31-i-P.0.16.1.1

我只想从名称中获取此名称(所需的输出):

12.0.111.22_31

然后将.替换为0并删除"_",所以我得到了以下内容

1200011102231

好吧,我试图从这样的事情开始

cd %cd% 
for %%F in (*.txt) do echo %%~nxF >>1.txt

但我不知道如何继续

编辑,代码:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=C:UsersmoudizDesktopnew foldertttt"
FOR /f "delims=" %%a IN (
'dir /b /a-d "%sourcedir%*.pbd" '
) DO (
FOR /f "tokens=4delims=-" %%d IN ("%%a") DO (
SET "modname=%%d"
SET "modname=!modname:.=0!"
SET "modname=!modname:_=!"
ECHO %%a becomes !modname!
)
)
GOTO :EOF
pause

文件的名称

P-Script-LogFiles-1.0.33.33_123-IB-P.0.16.357.1.pbd

输出100033033123

[注意:OP 姗姗来迟地要求将名称的第一个标记附加到从原始帖子生成的名称前面,因此在下面使用%%c]

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:sourcedir"
FOR /f "delims=" %%a IN (
'dir /b /a-d "%sourcedir%*.txt" '
) DO (
echo File "%%a"
FOR /f "tokens=1,4delims=-" %%c IN ("%%a") DO (
SET "modname=%%d"
SET "modname=!modname:.=0!"
SET "modname=!modname:_=!"
ECHO %%a becomes %%c!modname!
)
pause
)
pause
GOTO :EOF

您需要更改sourcedir的设置以适合您的情况。

使用delayedexpansion

,!var! 是指变量的修改值,set "var=!var:string=gnirts!" substitutes "gnirts" for "string" invarand assigns the result back tovar'。

现在 - 你想用这个修改后的结果做什么,你没有透露 - 但猜测重命名,

echo ren "%%a" "!modname!"

应该是可用的

要预置第一个标记,只需将tokens=更改为1,4*以选择第一个和第四个标记) - 并将for中的metavariable更改为%%c(以便%%d处理保持不变),然后使用%%c它将包含第一个-之前的原始文件名部分。

最新更新