Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch Prozent der Formatierung auslesen

Frage Entwicklung Batch & Shell

Mitglied: 90776

90776 (Level 2)

04.01.2011 um 07:51 Uhr, 4774 Aufrufe, 9 Kommentare

Ich wünsche euch allen ein schönes neues Jahr

Nun zu meiner Frage:

wie kann man den Prozentwert der Formatierung auslesen?

01.
C:\Windows\system32>format G: 
02.
Legen Sie eine neue Diskette in Laufwerk G: ein, 
03.
und drücken Sie die EINGABETASTE. 
04.
Der Typ des Dateisystems ist FAT32. 
05.
Überprüfung von 979 MB 
06.
XX Prozent bearbeitet.
denn die Position ist ja Variabel

Grüsse

Switcher
Mitglied: jeb-the-batcher
05.01.2011 um 00:46 Uhr
Hallo switcher94,

möglich scheint es zu sein ... aber einfach ist es nicht.

Ich würde den Format Befehl in eine Datei umleiten, asynchron dazu noch eine Batchdatei starten,
die genau diese Datei prüft und das Ende ausliest.

Jedes mal wenn "XX Prozent bearbeitet" gelesen wurde, die Datei löschen.
Die Prozentangabe aus dem eingelesenem String zu extrahieren ist dabei noch das leichteste.

Sprich: Wenn man nicht gerade Spaß an solchen Sachen hat, sollte man es vielleicht besser lassen.
Bitte warten ..
Mitglied: pieh-ejdsch
05.01.2011 um 03:10 Uhr
moin switcher, moin jeb,

mit Bachtmitteln ist das bis zu 27 Prozent Möglich danach kann set /p den Rest der Zeile nicht mehr darstellen bzw in die Variable aufnehmen
in einer ForSchleife kann man Diese Datei auch nicht verwerten weil ein <CR> ohne <LF> vor die nächste Prozentausgabe angefügt wird.
die Zeilen können deswegen nicht mit Set gesetzt werden.
der Befehl (auch echo ) Verschwindet einfach und wird nicht ausgeführt.
wenn Du die Ausgabe vom Format in eine Datei Umleitest siehst Du das Ergebnis.
das <CR> lässt sich im Set mit Erweiterter darstellung entfernen aber nur mit set /p Aufnehmen.

entweder es geht mit vbs oder einen HexEditor, welcher die <CR> ohne <LF> löscht.

eine andere Möglichkeit ist die WarteZeit von einem Prozent zum anderen in etwa Hochzurechnen und die Prozente nach 27 so auszugeben.
inetwa so
01.
@echo off&setlocal 
02.
del datei 
03.
start /min cmd /c "echo.|format l: /v:leer>Datei" 
04.
set /a Zeit = 2000 
05.
set /a neu = 0 , alt = 0 , DZeit = Zeit * 2 
06.
for /l %%i in (0,1,%DZeit%) do echo.>nul 
07.
:anfang 
08.
more +4 datei>datei2 
09.
set /p Line=<datei2 
10.
set "Line=%Line: 
11.
=" "%" 
12.
for %%i in ("%Line%") do for /f %%j in ("%%~i") do if %%j gtr 0 if %%j lss 28 set "Neu=%%j" 
13.
 
14.
set /a NeuVergleich = alt + 1 
15.
if %NeuVergleich% gtr %Neu% set /a Zeit + = (Zeit / 10) 
16.
if %NeuVergleich% lss %Neu% set /a Zeit - = (Zeit / 10) 
17.
set "Alt=%Neu%" 
18.
:Limit 
19.
for /l %%i in (0,1,%Zeit%) do echo.>nul 
20.
echo %zeit% 
21.
echo %time% 
22.
echo %neu% Prozent fertig 
23.
echo. 
24.
if %neu% equ 100 echo Formatieren ist Fertig& goto :eof 
25.
if %neu% geq 27 set /a Neu + = 1 &goto :Limit 
26.
goto :anfang
[Edit] selbst hier wird das <CR> nicht aufgenommen dazu
echo.|format l: /v:leer>Datei
ausführen und Datei öffnen und das<CR> rausklmüstern vor "1 Prozent" und in Zeile 10 den Set Befehl nach dem : einfügen und Zeile 11 dranhängen
oder einen anderen Befehl nehmen welcher ein Prozentanzeige hat zB. COPY /Z /Y Quelle Ziel>Datei [/EDIT]
Gruß Phil
Bitte warten ..
Mitglied: pieh-ejdsch
05.01.2011 um 16:08 Uhr
moin,

die For-Schleife holt doch die gesamte Zeile mit zwischenliegenden <CR> in eine Variable jedoch keine tokens.
was mir jetzt gelungen ist - das <CR> durch einen call aus der For-Schleife zu ersetzen.
das <CR> wird aus der Ausgabe vom COPY extrahiert.
die Anzeige vergleicht jetzt bis 100 Prozent geht also ziemlich genau.

was Du allerdings damit machen willst - eventuell eine Restzeitanzeige einbauen...

01.
@echo off&setlocal 
02.
 
03.
::: Create <CR> 
04.
copy /y /z "%Windir%\System32\shell32.dll" "%temp%">"%temp%\CR" 
05.
del "%temp%\shell32.dll" 
06.
set /p CR=<"%temp%\CR" 
07.
del "%temp%\CR" 
08.
setlocal enabledelayedexpansion 
09.
set "CR=!CR:~14,1!" 
10.
 
11.
12.
echo @echo off 
13.
echo set "Zeile=%%Zeile:!CR!=" "%%" 
14.
)>"%temp%\CR.cmd" 
15.
 
16.
::: Begin 
17.
start /min cmd /c "echo.|format m: /v:leer>"%temp%\Datei" 
18.
set /a Zeit = 2000 
19.
set /a neu = 0 , alt = 0 , DZeit = Zeit * 2 
20.
for /l %%i in (0,1,%DZeit%) do @echo.>nul 
21.
 
22.
:anfang 
23.
more +4 "%temp%\Datei">"%temp%\Datei2" 
24.
 
25.
for /f "usebackq delims=" %%i in ("%temp%\Datei2") do ( 
26.
	set "Zeile=%%i" 
27.
	call "%temp%\CR.cmd" 
28.
	for %%j in ("!Zeile!") do for /f "tokens=1,2" %%k in ("%%~j") do if "%%l" == "Prozent" if %%k gtr 0 if %%k lss 101 set "Neu=%%k" 
29.
30.
set /a NeuVergleich = alt + 1 
31.
if %NeuVergleich% gtr %Neu% set /a Zeit + = (Zeit / 10) 
32.
if %NeuVergleich% lss %Neu% set /a Zeit - = (Zeit / 10) 
33.
for /l %%i in (0,1,%Zeit%) do @echo.>nul 
34.
if not %alt% == %neu% ( 
35.
echo %zeit% 
36.
echo %time% 
37.
echo %neu% Prozent fertig 
38.
echo. 
39.
40.
set "Alt=%Neu%" 
41.
if %neu% equ 100 echo Formatieren ist Fertig& goto :eof 
42.
goto :anfang
Gruß Phil
Bitte warten ..
Mitglied: Biber
05.01.2011 um 16:28 Uhr
@jeb-the-batcher & pieh-ejdsch

Es ist aber in diesem Zweig des Forums auch erlaubt zu antworten:
"Es ist sicherlich möglich, eine al-dente-gekochte Maccheroni durch einen Amboss zu schiessen.... aber Batch ist nicht das optimale Werkzeug dafür"

Was soll das denn... die Prozentanzeige des Format-Befehls ist doch nun wirklich schon die end-dau-angemessene "Fortschrittsanzeige" der Formatierung.

Und hey! Es ist doch hoffentlich auch beim Betriebssystem Windows bald Geschichte, dass eine Formatierung eine lesbare Prozentanzeige hat.
Normalerweise sollte so etwas einmal "witsch" machen und gut.

@Zwitscher: Könntest du mit der Antwort leben: "Geht leider nicht, trotzdem schönen Nachmittag"?

Grüße
Biber
Bitte warten ..
Mitglied: 90776
05.01.2011 um 18:42 Uhr
Erstmal danke an alle die sich die mühe gemacht haben...

und ja Biber mit der antwort kann ich leben.

nur ich frag mich einfach warum es (für microsoft) so schwierig ist die ausgabe "ihrer programme" ein wenig Kunden - und bearbeitungsfreundlicher zu machen

eben Herzlichen Dank nochmals vorallem an pieh-ejdsch der sich ja wirklich sehr viel Mühe gemacht hat.

Grüsse
Switcher
Bitte warten ..
Mitglied: jeb-the-batcher
05.01.2011 um 22:06 Uhr
@pieh-ejdsch

Interessante Variante ein CR zu erzeugen, die kannte ich noch nicht, wobei ich mich nicht darauf verlassen würde, dass in jeder Windows Version shell32.dll gerade an Position 14 ein einzelnes CR enthält.

Allerdings hätte man sich auch gar kein CR erzeugen müssen, die wird man auch alle durch eine einfache Expansion wieder los
01.
set "zeile=%zeile%"
vernichtet alle CR's (Ende von Phase 1, Die Geheimnisse des Batch Zeilen Interpreters).

Ich bin mir auch nicht ganz sicher, ob das ganze bis 100% immer funktioniert.
Ich habe mit chkdsk getestet (mit mäßigem Erfolg), und das braucht bei mir recht lange und erzeugt dabei auch extrem viele Daten, so dass vermutlich irgendwann die maximale Zeilenlänge der "xx Prozent"-Zeile erreicht wird.

Mein Vorschlag die Datei einfach zwischendurch zu löschen, klappt leider auch nicht, da die Datei für Schreiboperationen gesperrt ist.

Aber was auch klappt ist FC, man kopiert immer einen Zwischenstand der Datei, und danach vergleicht man die aktuelle Datei mit dem Zwischstand bis diese sich unterscheiden, und FC listet die Unterschiede auch brav in eigenen Zeilen auf.

Eine Frage habe ich dann aber noch zu dem Teil
01.
set /a NeuVergleich = alt + 1  
02.
if %NeuVergleich% gtr %Neu% set /a Zeit + = (Zeit / 10)  
03.
if %NeuVergleich% lss %Neu% set /a Zeit - = (Zeit / 10)
Wozu ist das gut? Und kann überhaupt %NeuVergleich% jemals kleiner als %Neu% sein?

jeb (der immer an den Problemen interessiert ist, die man mit Batch eigentlich nicht lösen sollte)
Bitte warten ..
Mitglied: pieh-ejdsch
05.01.2011 um 23:48 Uhr
moin jeb,
...wobei ich mich nicht darauf verlassen würde, dass...
das <CR> wird ja nicht aus der shell32.dll geholt, sondern aus der Kopieraktion dieser Datei nach %temp%.
die shell32.dll sollte es ja auf jeden Windows System geben. Groß genug ist sie auch um ein Paar ProzentAusgaben wärend des Kopierens mit "COPY /y /z ..." auszugeben. Ich verwerte also nur die Ausgabe vomCopyBefehl was mit jeder anderen ausreichend großen Datei auch gehen sollte.

set "zeile=%zeile%"
Hab ich doch nicht so genau in Deiner Anleitung gelesen - ich hatte es erst mit einem Call in eine Sub mit Parameter probiert aber habe immer Versucht das <CR> mit " " zu ersetzen (was Voraussetzte, dass das <CR> schon im Klartext dasteht - weil sonst die Ersetzung weder mit der Vorzögerung noch ohne Verzögerung geklappt hat), was den Vorteil hat das der String nicht in etwa 100 Tokens Zerlegt werden muss. Daher dann der Call in eine Batch. Es hätte sicher noch zig andere Lösungen dafür gegeben.

Eine Frage habe ich dann aber noch zu dem Teil
Wozu ist das gut? ... kann überhaupt %NeuVergleich% jemals kleiner als %Neu% sein?
ja wird auch - wenn Du eine 256MB große SD Karte damit Formatierst wird der Wert erst steigen und dann sinken - also ist der Prozentwert der Formatierung mal ein bischen schneller als das Zeitlimit um den neuen +1 Wert auszulesen.
ist eigentlich nur für die Hochrechnung beim 27 Prozent Kommentar gewesen, aber man kann es auch drinlassen weil es die LeseZugriffe auf die Batch veringert - und CPU sowie HDD nicht Überbelastet werden.

@10750
das ist eben die Ausgabe von den Befehl. Damit er das Ordentlich Anzeigen kann wird halt ein <CR> in die Ausgabe eingefügt, damit die CMD-Line nicht Überläuft. Ich finde das ist doch gut gelöst von den Jungs - und für gut befunden - es hat sich ja sonst noch keiner darüber Beschwert. Es gibt genug Problemme in Batch/CMD aber es ist schon gut durchdacht und Praktikabel. Nur die Reaktion auf irgendeinen Befehl ist unerwartet - aber die CMD tut genau das richtige.

@Biber
sicherlich könnte ich sowas auch hinschreiben, aber ich bin nicht bereit vor Irgendeinen Probem zu stehen und zu sagen: Nein das schaffe ich nicht! Dafür bin ich viel zu Ehrgeizig/Pingelig.

Gruß Phil
Bitte warten ..
Mitglied: Biber
06.01.2011 um 19:12 Uhr
Moin Phil,

Zitat von pieh-ejdsch:
@Biber
sicherlich könnte ich sowas auch hinschreiben, aber ich bin nicht bereit vor Irgendeinen Probem zu stehen und zu sagen:
Nein das schaffe ich nicht! Dafür bin ich viel zu Ehrgeizig/Pingelig.

Meine Formulierung war doch nicht "Ich schaffe es nicht".
Die Maccheroni-Nummer hab ich auch schon viermal geschafft, einmal davon beim Telefonieren.

Ich bin nur der Ansicht, dass Aufwand und möglicher Nutzen in keinem gesunden Verhältnis zueinander stehen.
Und wenn solche Dönekens, dann etwas schlichter:
01.
@echo off & setlocal 
02.
del datei 2>nul 
03.
start /min cmd /c "echo.|format M: /v:leer>Datei" 
04.
:Loop 
05.
cls 
06.
if exist datei more +5 datei>datei2 
07.
if exist datei findstr /C:"Prozent bearbeitet" Datei2 
08.
sleep -m 1000 
09.
goto :Loop
Aber volkswirtschaftlich sinnvoller ist es vielleicht, Klingeltöne ins Oberfränkische zu übersetzen.

Grüße
Biber
Bitte warten ..
Mitglied: jeb-the-batcher
06.01.2011 um 20:43 Uhr
Zitat von Biber:
Ich bin nur der Ansicht, dass Aufwand und möglicher Nutzen in keinem gesunden Verhältnis zueinander stehen.

Aber dann hätte ich nicht die nette Idee gesehen wie pieh-ejdsch (Philipp) das CR mit einem Copy /z erzeugt, so hatte das Ganze durchaus einen Nutzen.

Grüße
jeb
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Mit batch zeilen auslesen
gelöst Frage von keksegrillerBatch & Shell2 Kommentare

Hallihallo, ich fange gerade an mit batch-Dateien zu arbeiten und komme trotz stundenlangem ausprobieren und googlen leider nicht mehr ...

Batch & Shell
Batch: Textdatei Zeilenweise auslesen
gelöst Frage von CreatorXBatch & Shell2 Kommentare

Hallo, ich weiß, zu dem Thema gibt es schon unzählige Threads. Ich hab auch einiges dazu gefunden und trotzdem ...

Batch & Shell
Per Batch Client auslesen
gelöst Frage von 103148Batch & Shell14 Kommentare

Hallo, ich möchte gerne paar Infos von unseren Clients auslesen. Dazu würde ich folgenden Befehl im Anmelde Script nutzen: ...

Batch & Shell
Batch mit for txt auslesen?
gelöst Frage von Mohji32Batch & Shell4 Kommentare

Hallo, ich habe mir den "Grundkurs" zu for schleifen im Board angeschaut aber leider nicht das hin bekommen was ...

Neue Wissensbeiträge
Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 22 StundenMicrosoft Office8 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 1 TagDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 1 TagSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Microsoft Office

Outlook 2016 - Beim Weiterleiten keine PDF Anhänge mehr - KB4011626 entfernen

Erfahrungsbericht von Deepsys vor 1 TagMicrosoft Office3 Kommentare

Wenn ihr feststellt das ihr beim Weiterleiten von E-Mails keine PDF Anhänge mehr versendent, dann dankt Microsoft. Diese tolle ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner14 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...