ファイルのコピー/移動はrobocopyによって行われ、出力は非表示にならないため、ファイルのリストを生成するときにコードが停止しているように見えると想定します
あなたのコードから適応
rem Get a carriage return into a variable
for /f %%a in ('copy "%~f0" nul /z') do set "CR=%%a"
set "spinner=/-\|"
(
for %%A in ("!sourcedir!\*") do (
<nul >con set /p"=Searching !spinner:~0,1!!CR!"
set "spinner=!spinner:~1!!spinner:~0,1!"
echo %%~tA %%~xA %%~nA
)
>con echo Searching files done
)>>"%temp%\testtoken.txt" 2>nul
または、最初にフォルダー内のファイル数を取得してから、パーセント インジケーターを表示することもできます
for /f %%a in ('copy "%~f0" nul /z') do set "CR=%%a"
set "numFiles=0"
for /f %%a in ('dir /a-d "!sourcedir!\*" ^| findstr /b /c:" "') do (
if %%a gtr !numFiles! set "numFiles=%%a"
)
set "count=0"
set "oldPct=-1"
(
for %%A in ("!sourcedir!\*") do (
set /a "count+=1"
set /a "pct=100*count/numFiles"
if !pct! gtr !oldPct! (
set "oldPct=!pct!"
>con echo Processed: !pct!!CR!%%
)
echo %%~tA %%~xA %%~nA
)
>con echo Searching files done
)>>"%temp%\testtoken.txt" 2>nul
どちらの場合も、処理中のファイルごとに出力ファイルを開く/書き込む/閉じるのではなく、完全なループが括弧で囲まれてリダイレクトされます。
そして、これは単なるコメントです。これにより、実行中のプロセスがユーザーに通知されますが、このファイルの生成は必要ありません。ファイルに関する情報を書き込んでおり、後で同じ情報を読み取ります。最初のループですべての処理を行う必要があります。