2017-12-01 9 views
0

Zuerst suchte ich nach einem Code, wenn bereits hier oder anderswo, existiert aber kein Ergebnis mit meinen Anforderungen gefunden. Also fing ich an, es Teil für Teil aufzubauen. Ich setze einige Dinge wie bekommen Gesamtnummer, als temporäre Datei erstellen, wenn nicht vorhanden. Wenn die Datei mit dem Datensatz existiert als Datensatz gesetzt, wie viel getan wird , nach dem in einem Zyklus "für" setzen und alles zählen, um Ergebnisse auch mit dem Prozentsatz anzuzeigen.Windows cmd für Schleife Zyklus und Zeit zählen + Prozent

Also das ist eigentlich das Ergebnis dessen, was ich getan habe.

@echo off 
setlocal enableExtensions enableDelayedExpansion 
set /p NUMBER=<total_number.info 
set INFO_FILE=total_done.info 
IF NOT EXIST %INFO_FILE% (
    (echo 1) > %INFO_FILE% 
) 
set /p NUMBER_DONE=<%INFO_FILE% 
for /l %%x in (%NUMBER_DONE%, 1, %NUMBER%) do (
    set /a "Total_Left=%NUMBER%-%%x" 
    set /a "percent=(%%x*100)/%NUMBER%" 
    if !Total_Left! GEQ 1 (
     set /a "Seconds=!Total_Left!*2" 
    ) else (
     set /a "Seconds=00" 
    ) 
    if !Seconds! GEQ 60 (
     set /a "Minutes=!Seconds!/60" 
    ) else (
     set /a "Minutes=00" 
    ) 
    if !Minutes! GEQ 60 (
     set /a "Hours=!Minutes!/60" 
    ) else (
     set /a "Hours=00" 
    ) 
    if !Hours! GEQ 24 (
     set /a "Days=!Hours!/24" 
    ) else (
     set /a "Days=0" 
    ) 
    set /a "T_L_H=!Hours!-(!Days!*24)" 
    set /a "T_L_M=!Minutes!-(!Hours!*60)" 
    set /a "T_L_S=!Seconds!-(!Minutes!*60)" 
    set "T_L_Ho=0!T_L_H!" 
    set "T_L_Mi=0!T_L_M!" 
    set "T_L_Se=0!T_L_S!" 
    TITLE Test - Percent done : !percent!%% 
    echo. 
    echo Time Left : !Days! Days !T_L_Ho:~-2!:!T_L_Mi:~-2!:!T_L_Se:~-2! 
    echo. 
    echo Total pages to be done : %NUMBER% 
    echo Pages done : %%x 
    echo Rest of the pages : !Total_Left! 
    echo Percent done : !percent!%% 
    if %%x GEQ %NUMBER_DONE% (
     (echo %%x) > %INFO_FILE% 
     timeout 1 > NUL 
    ) 
    cls 
) 
pause>NUL 

Script zuletzt aktualisiert 2018.12.01 23:45

Antwort

0

Hier ist ein Powershell-Skript, das den Fortschritt mithilfe einer Datei überwachen wird die aktuelle Schrittnummer enthält. Stellen Sie sicher, dass Sie die Überwachungsdatei erstellen, bevor Sie sie starten.

<# 
.SYNOPSIS 
This cmdlet displays a progress bar based on monitoring a watch file. 

.DESCRIPTION 
If no PROMPT string is provided, the $Env:PROMPT string will be used. 

.PARAMETER TotalCount 
Specify the total number of steps to monitor. 

.PARAMETER WatchFile 
Specify the path to the file containing the number of steps completed. 

.EXAMPLE 
Monitor-Progress -TotalCount 10 -WatchFile wf.txt 
#> 
[CmdletBinding()] 
Param (
    [Parameter(Mandatory=$true)] 
    [int]$TotalCount 

    ,[Parameter(Mandatory=$true)] 
    [ValidateScript({Test-Path $_ -PathType 'Leaf'})] 
    [string]$WatchFile 
) 

$currentcount = 0 
$previouscount = $currentcount 

while ($currentcount -lt $TotalCount) { 
    $currentcount = [int32](Get-Content $WatchFile) 

    if ($currentcount -ne $previouscount) { 
     Write-Progress -Activity "Watching long progress" ` 
      -percentComplete ($currentcount/$TotalCount*100) 
     $previouscount = $currentcount 
    } 
} 

Wenn Sie dies aus der cmd.exe-Shell laufen, können Sie:

powershell -NoProfile -File Monitor-Progress.ps1 -TotalCount 5 -WatchFile wf.txt