我有一个文件名数组,我希望打印每个文件的名称:
例如:如果数组包含文件: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
)
有什么想法吗?
答案 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