批处理文件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
没有暂停