批处理文件regex以从文件名获取特定编号

批处理文件regex以从文件名获取特定编号,regex,batch-file,Regex,Batch File,我有一个文件名 pp-sssss-iii-12.0.111.22_31-i-p.0.16.1.1 我只想从名称中获得此(所需输出): 12.0.111.22\u 31 然后将替换为0并删除“\ux”,因此我得到了以下结果 1200011102231 我试着从这样的事情开始 cd %cd% for %%F in (*.txt) do echo %%~nxF >>1.txt 但我不知道如何继续下去 编辑,代码: @ECHO OFF SETLOCAL ENABLEDELAYEDEXPA

我有一个文件名

pp-sssss-iii-12.0.111.22_31-i-p.0.16.1.1

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

12.0.111.22\u 31

然后将
替换为
0
并删除“\ux”,因此我得到了以下结果

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

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

@ECHO关闭
SETLOCAL ENABLEDELAYEDEXPANSION
设置“sourcedir=U:\sourcedir”
对于/f“delims=”%%a IN(
'dir/b/a-d“%sourcedir%\*.txt”'
)做(
回显文件“%%a”
对于/f“tokens=1,4delims=-”%%c IN(“%%a”)DO(
设置“modname=%%d”
设置“modname=!modname:.=0!”
设置“modname=!modname:Name=!”
ECHO%%a变成%%c!modname!
)
暂停
)
暂停
后藤:EOF
您需要更改
sourcedir
的设置以适应您的环境

使用
delayedexpansion
!瓦尔!指变量的修改值,并且
set“var=!var:string=gnirts!”将
var
中的“字符串”替换为“gnirts”,并将结果分配回
var`

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

echo ren "%%a" "!modname!"
应该是可用的


要预先设置第一个标记,只需将
标记=
更改为
1,4
*以选择第一个和第四个标记)-并将
中的
元变量
更改为
%%c
(以便
%%d
处理保持不变),然后使用
%%c
,它将包含第一个
-

之前的原始文件名部分。我希望结果位于文件>>result.txt中。。我复制了您的示例,我对这个
'dir/b/a-d”%sourcedir%\*.pbd“
进行了建模,添加了
暂停
,然后我运行了它,但它不起作用,或者-“它不起作用”没有提供很多线索。使用您指定的文件名,
pp-sssss-iii-12.0.111.22_31-i-P.0.16.1.1.txt
(我添加了
.txt
,因为您发布的代码使用了
*.txt
掩码),此例程
echo
ed“pp-sssss-iii-12.0.111.22_31-i-P.0.16.1.1.txt变为1200011102231”,这正是您想要的。我不知道从哪里来的
*.pbd
。这个
.pbd
与我正在做的场景有关。我会在编辑栏上贴出我是如何复制你的代码的,以及文件的确切名称好吗?你先说“文件”,然后编辑栏上写“文件夹”。如果需要目录名,请将
dir
命令从
/a-d
(意思是“属性-无目录”)更改为
/ad
(意思是“仅属性-目录”)键入错误,
文件
,但我不明白为什么要更改为/ad?我运行下面的代码,但它不工作,
cmd
没有暂停