批处理文件正则表达式从文件名中获取特定数字

时间:2016-12-22 08:43:32

标签: regex batch-file

我有一个文件名

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:\Users\moudiz\Desktop\new folder\tttt"
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

1 个答案:

答案 0 :(得分:1)

[注意: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" in var and assigns the result back to var`的修改值。

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

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

应该可以使用

要预先添加第一个令牌,只需将tokens=更改为1,4 *即可选择第一个和第四个令牌) - 并将metavariable中的for更改为{ {1}}(为了使%%c处理保持不变),然后使用%%d,其中包含原始文件名在第一个%%c之前的部分。