2015-03-31 40 views
0

我有一個批處理腳本,其中位於%temp%文件夾中的文本文件(名爲'texttoken.txt')上寫有特定文件夾中所有文件的'名稱/日期修改'。在完成所有文件詳細信息的寫入後,每個文件都將根據其「修改日期」進行robocopy到文件夾。我注意到的是,當在包含大量文件(例如數千個)的文件夾上使用腳本時,看起來腳本在文件寫入的時刻停止工作(當它耗時太長時)。Progress indicator /「加載字符串」

我想要的是一個進度指示器(如條形圖或百分比),顯示已完成多少'寫入過程'。如果不這樣做,一個狀態字符串('正在加載...'或'正在寫入的文件')只要'寫入過程'就會運行。我將如何開始批量實施這些?

+0

你可以包含你的批處理文件嗎?這個問題不僅可以在詳細文件生成中,而且可以在文件列表檢索中進行。如果我們可以看到它,則更容易檢測到問題並提出修正,替代方案或插件。 – 2015-03-31 08:25:28

+0

這是我的腳本的一個片段:[鏈接](http://pastebin.com/m7KAWwUx) – mindblues 2015-04-06 23:41:16

回答

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 

在這兩種情況下,而不是打開/寫入/關閉輸出文件f或每個文件正在處理,完整的循環被括在括號中並被重定向。

這只是一條評論。雖然這將使用戶瞭解正在完成的過程,但不需要此文件生成。您正在編寫有關這些文件的信息,並在稍後閱讀相同的信息。你應該在第一個循環中完成所有的處理。

+0

感謝您的答案。只是好奇這個腳本中'con'命令實際上做了什麼? – mindblues 2015-04-14 04:32:57

+0

@mindblues,因爲完整的'for'被重定向,所以如果你只是使用'echo text',文本將被髮送到輸出文件,而不是控制檯。 ''con'將'echo'命令的輸出重定向到控制檯。 – 2015-04-14 05:55:08