0

さて、ループの一部として、不明な数のファイル名を読み込んで、フォルダー内のファイル数に依存する名前の変数にそれらを保存しています。このような:

SET /a count=1

DIR %rootFolder%> "fileList.txt" /b

FOR /f "tokens=* delims= usebackq" %%a IN ("fileList.txt") DO CALL :LOOP %%a
goto :LOOP2
:Loop
SET var=%1
SET File%count%=%var%
SET /a count=%count%+1
GOTO:EOF

これはうまくいきます

ECHO File1
ECHO File2

出力

firstfile.txt
secondfile.txt

私が抱えている問題は、次のコードのため、後のループで変数の内容を読み取ることです:

SET fileName=File%count%
ECHO %fileName%> temp.txt

出力

File1

その名前で変数に格納された値を出力したいとき。望ましい出力:

firstfile.txt

これを行う方法はありますか?

4

3 に答える 3

1

このコードが役立つと思います:

setlocal enabledelayedexpansion
set /a count=0
for /f "delims=" %%a in ('dir /b %rootFolder%') do (
    set /a count+=1
    set File!count!=%%a
)

for /l %%a in (1,1,%count%) do (
    echo !File%%a!
)

また、! を使用したショートカットが気に入らない場合は、次のように % のみを使用して要求したことを実現できます。

set /a count=0
for /f "delims=" %%a in ('dir /b %rootFolder%') do call :loop %%a
call set var=%%File%count%%%
echo %var%

goto :eof

:loop
set /a count+=1
set File%count%=%1
goto :eof
于 2012-05-22T18:20:19.667 に答える
0

これを試して:

call echo %%fileName%% > temp.txt
于 2012-05-22T18:31:38.757 に答える
0

ファイル名に が含まれている場合、panda-34 ソリューションは失敗します!。これは、遅延展開によって %%a の展開が破損するためです。このソリューションは!、ループ内で遅延展開のオンとオフを切り替えることで、ファイル名をサポートするように改善できます。

setlocal disableDelayedExpansion
set /a count=0
for /f "delims=" %%a in ('dir /a-d /b %rootFolder%') do (
  set /a count+=1
  setlocal enableDelayedExpansion
  for /f %%b in ("!count!") do (
    endlocal
    set "file%%b=%%a"
  )
)

setlocal enableDelayedExpansion
for /l %%a in (1,1,%count%) do (
  echo !File%%a!
)

私の考えでは、遅延拡張ソリューションは断然最良のアプローチです。しかし、別のオプションがあります。

setlocal disableDelayedExpansion
set /a count=0
for /f "delims=" %%a in ('dir /a-d /b %rootFolder%') do (
  set /a count+=1
  call set "file%%count%%=%%a"
)

for /l %%a in (1,1,%count%) do (
  call echo %%File%%a%%
)

call ソリューションはより単純に見えますが、大幅に遅くなり、展開された変数に のような特殊文字が含まれていると失敗する可能性があります&

于 2012-05-22T18:50:24.837 に答える