如何从文件名列表获取子串 [英] How to get a Substring from list of file names
问题描述
我想开发以下逻辑
- 阅读目录中的所有文件
- 解压文件名的第一部分 - 这将是合作伙伴名称
- 第一underscore-此之后提取任何将文件名
- 例如:ZZTEST_123_abc_doc.txtZZTEST是合作伙伴。 123_abc_doc.txt是文件名。
下面是code我公司开发的
Below is the code I developed
@echo off
setlocal ENABLEDELAYEDEXPANSION
Set Test_Dir=C:\Axway\projects\Cardinal\dosscript\test
cd %Test_Dir%
for /r %%a in (*.*) do (
Set "fname1=%%~nxa"
echo Filename is :!fname1!
for /f "tokens=1 delims=_" %%i in ("!fname1!") do (
Set "partner=%%i"
echo Partner is :!partner!
Set "str_tmp=!partner!_"
echo !str_tmp!
call :strlength length !str_tmp!
echo !length!
set fname=!fname1:~%length%!
echo !fname1:~%length%!
)
)
goto :eof
:strlength
setlocal enableextensions
set "#=%~2"
set length=0
:stringLengthLoop
if defined # (set "#=%#:~1%"&set /A length+=1&goto stringLengthLoop)
endlocal && set "%~1=%length%"
GOTO :EOF
但结果是
ID_ZZRoutingID_filename.txt
Filename is :ZZRoutingID_ZZRoutingID_filename1.txt
Partner is :ZZRoutingID
12
Result: ID_ZZRoutingID_filename1.txt
结果应ZZRoutingID_filename1.txt,但我得到结果
ID_ZZRoutingID_filename1.txt。
The result should be ZZRoutingID_filename1.txt but i am getting
ID_ZZRoutingID_filename1.txt.
请帮忙
推荐答案
的长度计算的目的我也不清楚,但我会建议增加以下内容的星号 1
在 FOR / F标记= 1 delims = _
。然后你会得到%% j中的文件名你要找的人通过
。
The purpose of the length calculation is not clear to me, but I would suggest adding an asterisk following the 1
in your for /f "tokens=1 delims=_"
. You would then get the "filename" you were looking for through %%j
.
我测试了它是这样的:
@echo off
setlocal EnableDelayedExpansion
set source=D:\Program Files\Somewhere
cd %source%
for /r %%i in (*.*) do (
for /f "tokens=1* delims=_" %%j in ( "%%~nxi" ) do (
echo partner: %%j
echo name: %%k
)
)
endlocal
如果您不需要通过子目录递归的:
If you do not need to recurse through sub-directories:
@echo off
set source=D:\Program Files\Somewhere
for /f "tokens=1* delims=_" %%i in ( 'dir "%source%" /b /a-d' ) do (
echo partner: %%i
echo filename: %%j
)
DIR / B / A-D
检索除了它的子目录目录内容的列表:
dir /b /a-d
retrieves the list of a directory's content except its sub-directories:
D:\Program Files\Somewhere>dir /b /a-d
ZZTEST_123_456.txt
ABCDEF_890_FFF.doc
FOOBAR_567_@@@.zzz
这篇关于如何从文件名列表获取子串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!