0

特定のフォルダー内のすべてのファイルの「名前/変更日」が、フォルダーにあるテキストファイル (「texttoken.txt」という名前) に書き込まれたバッチスクリプトがあり%temp%ます。すべてのファイルの詳細が書き込まれた後、各ファイルは「変更日」に基づいてフォルダーにロボコピーされます。私が気付いたのは、大量のファイル (つまり数千) を含むフォルダーでスクリプトを使用すると、ファイルが書き込まれている瞬間 (時間がかかりすぎたとき) にスクリプトが動作を停止したように見えることです。

私が欲しいのは、「書き込みプロセス」がどれだけ完了したかを示す進行状況インジケーター (バーやパーセンテージなど) です。それに失敗すると、「書き込みプロセス」の間実行されるステータス文字列 (「読み込み中...」または「ファイルが書き込まれています」)。これらをバッチで実装するにはどうすればよいですか?

4

1 に答える 1

0

ファイルのコピー/移動は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

どちらの場合も、処理中のファイルごとに出力ファイルを開く/書き込む/閉じるのではなく、完全なループが括弧で囲まれてリダイレクトされます。

そして、これは単なるコメントです。これにより、実行中のプロセスがユーザーに通知されますが、このファイルの生成は必要ありません。ファイルに関する情報を書き込んでおり、後で同じ情報を読み取ります。最初のループですべての処理を行う必要があります。

于 2015-04-07T07:59:20.333 に答える