Как получить Подстроку из списка имен файлов - PullRequest
2 голосов
/ 15 сентября 2011

Я хочу разработать следующую логику

  1. Читать все файлы в каталоге
  2. Извлечь первую часть имени файла - это будет имя партнера
  3. Извлечь что-либо после первого подчеркивания - это будет имя файла
  4. Например: ZZTEST_123_abc_doc.txt  ZZTEST является партнером.123_abc_doc.txt - это имя файла.

Ниже код, который я разработал

@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.

Пожалуйста, помогите

1 Ответ

1 голос
/ 16 сентября 2011

Цель расчета длины мне не ясна, но я бы предложил добавить звездочку после 1 в вашем for /f "tokens=1 delims=_".Затем вы получите «имя файла», которое искали через %%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

Если вам не нужно проходить через подкаталоги:

@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 извлекает список содержимого каталога, кроме его подкаталогов:

D:\Program Files\Somewhere>dir /b /a-d
ZZTEST_123_456.txt
ABCDEF_890_FFF.doc
FOOBAR_567_@@@.zzz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...