如何从文件名列表获取子串 [英] How to get a Substring from list of file names

查看:173
本文介绍了如何从文件名列表获取子串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想开发以下逻辑


  1. 阅读目录中的所有文件

  2. 解压文件名的第一部分 - 这将是合作伙伴名称

  3. 第一underscore-此之后提取任何将文件名

  4. 例如:ZZTEST_123_abc_doc.txtZZTEST是合作伙伴。 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆