-1

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

例如:如果数组包含文件: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
)

有任何想法吗?

4

1 回答 1

0

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

注意:使用 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
于 2013-01-16T14:42:01.463 回答