批量获取字符串中的文件名

时间:2013-01-16 13:09:30

标签: batch-file

我有一个文件名数组,我希望打印每个文件的名称:

  

例如:如果数组包含文件:C:\ Windows \ Directx.log   然后,我想打印Directx.log

我知道如果我迭代一个文本文件,我可以这样做:

for %%F in ("C:\Documents and Settings\Usuario\Escritorio\hello\test.txt") do echo %%~nxF

但同样,它是一个数组而不是文本文件。

这是我的代码:

set filesCount=0
for /f "eol=: delims=" %%F in ('dir /b /s %SequencesDir%\*.%StandardExtension%') do (
    set "filesArray!filesCount!=%%F"
    set /a filesCount+=1  
)

set /a secondCnt=0

:LoopArray
if not %secondCnt%==%filesCount% (
    set CurrentFile=!filesArray%secondCnt%!
    echo !CurrentFile!
    for /f "delims=" %%A in ('echo(%CurrentFile:\=^&echo(%') do set ExactFile=%%~nxA
echo %ExactFile%
set /a secondCnt+=1
goto LoopArray
)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您拥有一组值并不重要。您已经知道如何遍历成员,因此对于特定的迭代,您希望将完整文件路径转换为名称和扩展名。这样做的简单方法是使用带有变量修饰符%%~nxA的FOR循环或带有参数修饰符%~nx1的子程序CALL。

注意:使用FOR / L循环来迭代你的成员而不是GOTO循环会更有效。

FOR循环解决方案(我的偏好)

for /l %%N in (0 1 %filesCount%) do (
  set "currentFile=!filesArray%%N!"
  for %%F in ("!currentFile!") do set "ExactFileName=%%~nxF"
  echo Full file path = !currentFile!
  echo File name = !ExactFileName!
)


CALL子程序解决方案(较慢)

for /l %%N in (0 1 %filesCount%) do (
  set "currentFile=!filesArray%%N!"
  call :getName "!currentFile!"
  echo Full file path = !currentFile!
  echo File name = !ExactFileName!
)
exit /b

:getName
set "ExactFileName=%~nx1"
exit /b