-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です。

注: GOTO ループの代わりに FOR /L ループを使用してメンバーを反復処理する方がはるかに効率的です。

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 に答える