Frage ist gelöstZeit messen für das Erstellen einer RAR-Datei
12.11.2008
18:24:53 Uhr3329 Aufrufe
6 Antworten
18:24:53 Uhr
6 Antworten
Noch nicht bewertet
Ich will die Zeit messen wie lange das zippen bzw. raren einer Datei bzw. aller Dateien eines Ordners dauert.
Hallo zusammen!
Ich habe folgenden ähnlichen Beitrage gefunden:
http://www.root-faq.de/Zeit_messen_zum_Er ...
Das ganze will ich aber nun verwenden um die Zeitdauer für das Zippen bzw. Raren einer Datei zu messen. Dazu habe ich mich mal mit der Thematik Batch-Dateien beschäftigt. Folgende Probleme habe ich dabei:
1) Wie kann ich die Zeit in eine Variable speichern?
2) Wie kriege ich alle Dateien eins Ordners in eine Variable (array)?
3) Wie berechne ich die benötigte Zeit aus?
[EDIT]: http://www.administrator.de/Laufzeit_bzw. ...!.html kann schon mal die Zeit messen (wie genau?). Fehlt dann nur noch 2)
Ansonsten gehts hier weiter:[/EDIT]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Zu 1):
Folgende Bsp. habe ich probiert um der Lösung näher zu kommen:
Zu "ECHO Beginn %date% - %time%":
Wie kann ich in einem Echo mehrere Ausgaben machen? In anderen Programmiersprachen macht man das meisten mit +
In diesem Fall wird %date% nicht ausgegeben. Das Konkattenieren funktioniert so weit, aber wenn ich "ECHO %%j.te Schleife: %time%" ausgebe, kommt immer dieselbe Zeit!?
Warum kann ich keine Zeit in eine Variable speichern?
SET /A %begin=%time%
Obiges funktioniert nicht, da ich die Meldung "ECHO ist ausgeschaltet (OFF)." bekomme bei "echo %begin%". In http://www.admini.de/batch-infos.htm steht, dass die Variable dann leer ist. So jetzt habe ich mir eine andere Lösung dafür gesucht (aus http://www.administrator.de/index.php?con ...:
Damit kriege ich das Datum in einer Variable, aber ich verstehe nicht wie das funktionieren soll. Nirgends ist c, b oder a definiert? Tokens bedeutet anscheinend die Schleifennr. (so hab ich es zumindest verstanden). Delims ist irgendwie der Platzhalter nach dem getrennt wird. Aber was ist wenn ich mehr brauche als diese drei Buchstaben (c, b, a)? Andere Buchstaben funktionieren anscheinend nicht. Ich hab das ganze natürlich auf time umgeschrieben. Aber ich will eigentlich %time% haben, da dies viel genauer ist. Dies wiederum geht nicht in den Klammern ('xxxx'). Gibt es nicht eine einfachere Methode?
Ich will Stunde, Minute, Sekunde, Hundertstel um die Genauigkeit zu erhöhen. Dabei frage ich mich wo die Genauigkeitsgrenze liegt. Wenn ich zweimal %time% ausführe, dann ist ja schon ein Unterschied im Hundertstel-Bereich normalerweise (hier nicht!?). Außerdem denke ich mir, dass Batch-Datein den geringsten Overhead haben als ein externes Programm. Was meint ihr dazu? Lediglich die aufrufe von WinRar & Co. bringen eine Verzögerung mit sich.
Zu 2):
Mit
bekomme ich die gewollte Liste. Wie kriege ich jetzt das in eine Variable? Welche Variablen werden im Batch-Modus überhaupt angeboten? Was ich so gesehen habe, gibt es keine Arrays! Nur Pseudo-Arrays bzw. Abhilfen wie das hier:
von http://www.administrator.info/index.php?c ...
Oder das hier:
von http://www.msfn.org/board/lofiversion/ind ...
Aber ich verstehe nicht wie das funktioniert... Was bedeutet tokens=1,2,* oder tokens=1-3 ? usw.
Zu 3):
Am einfachsten wäre es, wenn ich es so machen könnte:
Aber das geht so ja nicht. In http://www.root-faq.de/Zeit_messen_zum_Er ... wird es folgendermaßen gemacht:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Ich hoffe Ihr könnt mir weiterhelfen.
LG
anve
PS: Hilfreiche Seiten:
http://www.admini.de/batch-infos.htm
http://de.wikibooks.org/wiki/Batch-Progra ...
http://www.computerhope.com/batch.htm
Ich habe folgenden ähnlichen Beitrage gefunden:
http://www.root-faq.de/Zeit_messen_zum_Er ...
Das ganze will ich aber nun verwenden um die Zeitdauer für das Zippen bzw. Raren einer Datei zu messen. Dazu habe ich mich mal mit der Thematik Batch-Dateien beschäftigt. Folgende Probleme habe ich dabei:
1) Wie kann ich die Zeit in eine Variable speichern?
2) Wie kriege ich alle Dateien eins Ordners in eine Variable (array)?
3) Wie berechne ich die benötigte Zeit aus?
[EDIT]: http://www.administrator.de/Laufzeit_bzw. ...!.html kann schon mal die Zeit messen (wie genau?). Fehlt dann nur noch 2)
Ansonsten gehts hier weiter:[/EDIT]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Zu 1):
Folgende Bsp. habe ich probiert um der Lösung näher zu kommen:
01.
@ECHO OFF 02.
ECHO Beginn %date% - %time% 03.
SET /A %begin=%time% 04.
FOR /L %%j IN (1 1 2) DO ( 05.
ping localhost -n 5 >nul 06.
ECHO %%j.te Schleife: %time% 07.
) 08.
SET /A %end=%time% 09.
ECHO Ende %time% 10.
ECHO %begin%Zu "ECHO Beginn %date% - %time%":
Wie kann ich in einem Echo mehrere Ausgaben machen? In anderen Programmiersprachen macht man das meisten mit +
In diesem Fall wird %date% nicht ausgegeben. Das Konkattenieren funktioniert so weit, aber wenn ich "ECHO %%j.te Schleife: %time%" ausgebe, kommt immer dieselbe Zeit!?
Warum kann ich keine Zeit in eine Variable speichern?
SET /A %begin=%time%
Obiges funktioniert nicht, da ich die Meldung "ECHO ist ausgeschaltet (OFF)." bekomme bei "echo %begin%". In http://www.admini.de/batch-infos.htm steht, dass die Variable dann leer ist. So jetzt habe ich mir eine andere Lösung dafür gesucht (aus http://www.administrator.de/index.php?con ...:
01.
@for /F "tokens=1,2,3,4 delims=. " %%a in ('date /t') do set MONAT=%%c_%%b_%%a 02.
echo %MONAT%Ich will Stunde, Minute, Sekunde, Hundertstel um die Genauigkeit zu erhöhen. Dabei frage ich mich wo die Genauigkeitsgrenze liegt. Wenn ich zweimal %time% ausführe, dann ist ja schon ein Unterschied im Hundertstel-Bereich normalerweise (hier nicht!?). Außerdem denke ich mir, dass Batch-Datein den geringsten Overhead haben als ein externes Programm. Was meint ihr dazu? Lediglich die aufrufe von WinRar & Co. bringen eine Verzögerung mit sich.
Zu 2):
Mit
01.
dir /d /on /b > liste.txt01.
>for %i in (1,2,3) do @set var%i 02.
var1=Das ist 03.
var2=nur ein 04.
var3= Pseudoarray 05.
.......und so bewirke ich, das zuerst "%i" aufgelöst wird zu 1,2,3 und dann %var1%, %var2%, %var3%: 06.
>for %i in (1,2,3) do @echo !var%i!Oder das hier:
01.
For /f "usebackq delims==. tokens=1-3" %%i IN (`set strArrayName`) DO Echo Array field number %%j have value %%kAber ich verstehe nicht wie das funktioniert... Was bedeutet tokens=1,2,* oder tokens=1-3 ? usw.
Zu 3):
Am einfachsten wäre es, wenn ich es so machen könnte:
01.
SET /A %begin=%time% 02.
xxx 03.
SET /A %end=%time% 04.
ECHO end-beginAber das geht so ja nicht. In http://www.root-faq.de/Zeit_messen_zum_Er ... wird es folgendermaßen gemacht:
01.
SET /A return="((hours * 60 + mins) * 60 + secs) * 100 + csec"---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Ich hoffe Ihr könnt mir weiterhelfen.
LG
anve
PS: Hilfreiche Seiten:
http://www.admini.de/batch-infos.htm
http://de.wikibooks.org/wiki/Batch-Progra ...
http://www.computerhope.com/batch.htm
bastla schreibt am 12.11.2008 um 21:35:21 Uhr
Hallo anve!
Vorweg: Die Hilfe zu den einzelnen Befehlen kannst Du (am Beispiel "for") so aufrufen:
Zu
Dein Schleifenbeispiel scheitert daran, dass Variablen in Batch grundsätzlich nur einmalig am Beginn eines Blockes (wie eben einer "for"-Schleife oder eines "if"-Konstruktes) durch ihren Inhalt ersetzt ("aufgelöst") werden - soll dies auch innerhalb des Blockes erfolgen, so kann dies durch
ermöglicht werden. Dadurch ändert sich die Variablenschreibweise von
auf
was den unangenehmen Nebeneffekt mit sich bringt, dass "!" als Variablenbegrenzer (und nicht mehr als gewöhnliche Zeichen) interpretiert werden (und damit aus dem Variableninhalt "verschwinden", und falls sie paarweise auftreten, den dazwischen liegenden Text zumeist gleich "mitnehmen", da dieser Text als Variablenname verstanden wird und der Interpreter versucht, ihn durch seinen Wert zu ersetzen).
Zum tatsächlichen Rechnen mit den gespeicherten Werten für Beginn- und Endzeit hast Du ja schon eine passende Formel gefunden - diese wandelt die Zeitangabe in Hundertstelsekunden um.
Um allerdings die einzelnen Bestandteile ("tokens") der Zeit (also h, m, s und c) zu erhalten, muss der Zeitstring mittels "for /f"-Schleife aufgespalten werden (wobei als Trennzeichen = "delimiter" Doppelpunkt und Komma dienen):
Der erste Bestandteil wird der (angegebenen) Schleifenvariablen %%a zugewiesen, für die weiteren "tokens" geht es einfach alphabetisch weiter (%%b bis %%d).
Damit die Berechnung dann aber nicht zu einfach wird, gibt es noch eine kleine Hürde zu überweinden: Mit der Ziffer 0 beginnende Zahlenwerte werden als Oktalzahlen interpretiert, was für 00 bis 07 unproblematisch ist, für 08 und 09 aber (begreiflicher Weise) zu einem Fehler führt - Lösung: Setze vor die (zweistellige) Zahl eine 1 (wodurch etwa "109" entsteht) und subtrahiere 100, sodass nur noch die /Dezimal-)Zahl (9) als Ergebnis verbleibt.
Daraus folgt etwa folgender Code für eine Zeitberechnung:
Um den Nachkommaanteil in der letzten Zeile zweistellig ausgeben zu können, wird dieser wiederum durch Hinzufügen von 100 in den dreistelligen Bereich gebracht und durch Bildung des Teilstrings "letzte 2 Zeichen" bei Bedarf mit führender Null erzeugt.
Damit sollte
... womit noch die Frage
Grüße
bastla
Vorweg: Die Hilfe zu den einzelnen Befehlen kannst Du (am Beispiel "for") so aufrufen:
for /? :: oder help for1) Wie kann ich die Zeit in eine Variable speichern?
So, wie auch jeden anderen String (die CMD-Shell kann nur mit ganzzahligen Werten rechnen, sodass die Zeitangabe ohnehin nicht unmittelbar zu verarbeiten ist):set Variable=%time%Dein Schleifenbeispiel scheitert daran, dass Variablen in Batch grundsätzlich nur einmalig am Beginn eines Blockes (wie eben einer "for"-Schleife oder eines "if"-Konstruktes) durch ihren Inhalt ersetzt ("aufgelöst") werden - soll dies auch innerhalb des Blockes erfolgen, so kann dies durch
setlocal enabledelayedexpansion%Variable%!Variable!Zum tatsächlichen Rechnen mit den gespeicherten Werten für Beginn- und Endzeit hast Du ja schon eine passende Formel gefunden - diese wandelt die Zeitangabe in Hundertstelsekunden um.
Um allerdings die einzelnen Bestandteile ("tokens") der Zeit (also h, m, s und c) zu erhalten, muss der Zeitstring mittels "for /f"-Schleife aufgespalten werden (wobei als Trennzeichen = "delimiter" Doppelpunkt und Komma dienen):
for /f "tokens=1-4 delims=:," %%a in ("%time%") do echo Stunden: %%a Minuten: %%b Sekunden: %%c Hundertstelsekunden: %%dDamit die Berechnung dann aber nicht zu einfach wird, gibt es noch eine kleine Hürde zu überweinden: Mit der Ziffer 0 beginnende Zahlenwerte werden als Oktalzahlen interpretiert, was für 00 bis 07 unproblematisch ist, für 08 und 09 aber (begreiflicher Weise) zu einem Fehler führt - Lösung: Setze vor die (zweistellige) Zahl eine 1 (wodurch etwa "109" entsteht) und subtrahiere 100, sodass nur noch die /Dezimal-)Zahl (9) als Ergebnis verbleibt.
Daraus folgt etwa folgender Code für eine Zeitberechnung:
01.
@echo off & setlocal enabledelayedexpansion 02.
echo Beginn %date% - %time% 03.
set begin=%time% 04.
for /L %%j in (1 1 2) do ( 05.
ping localhost -n 5 >nul 06.
echo %%j.te Schleife: !time! 07.
) 08.
set end=%time% 09.
echo Ende %date% - %end% 10.
11.
for /f "tokens=1-4 delims=:," %%a in ("%begin%") do set /a BTime=((%%a * 60 + (1%%b-100)) * 60 + (1%%c-100)) * 100 + 1%%d-100 12.
for /f "tokens=1-4 delims=:," %%a in ("%end%") do set /a ETime=((%%a * 60 + (1%%b-100)) * 60 + (1%%c-100)) * 100 + 1%%d-100 13.
14.
set /a Dauer=ETime - BTime 15.
if %Dauer% lss 0 set /a Dauer+=8640000 16.
17.
echo\ 18.
echo Dauer in Hundertstelsekunden: %Dauer% 19.
set /a s=Dauer / 100 20.
set /a c=100 + Dauer %% 100 21.
echo Dauer in Sekunden: %s%,%c:~-2%Damit sollte
3) Wie berechne ich die benötigte Zeit aus?
weitgehend abgedeckt sein, ...... womit noch die Frage
2) Wie kriege ich alle Dateien eins Ordners in eine Variable (array)?
bliebe - diese allerdings animiert gleich zur Gegenfrage: "Wozu ein Array?" ( - das gibt es nämlich, wie Du schon herausgefunden hast, in CMD tatsächlich nicht.)Grüße
bastla
miniversum schreibt am 12.11.2008 um 21:41:20 Uhr
Da hast du mehrere Dinge nicht richtig (verstanden).
1. delims und tokens beim For:
Delims gibt die Trennzeichen an.
Tokens sind die Elemente (die durch die Trennziechen getrennt werden) die du haben willst.
Hier ein Paar Beispiele:
FOR /F "tokens=1,2,3 delims=:" %%i in ('echo x:y:z') do echo [%%i] [%%j] [%%k]
FOR /F "tokens=2 delims=:" %%i in ('echo x:y:z') do echo [%%i] [%%j] [%%k]
FOR /F "tokens=1,3 delims=:" %%i in ('echo x:y:z') do echo [%%i] [%%j] [%%k]
2. SET /A %end=%time% funktioniert nicht. Wenn dann SET end=%time%
3. Variabeln in einer klamer (in for oder in if) werden zu beginn des geklammerten blockes aufgelöst. Darin werden sie nicht aktualisiert. Bei for hilft hier meistens der Aufruf einer Unterprozedur mit Übergabe des Variabeln aus For mit "call". In der Unterprozedur werden dann die Vatiabeln wieder aufgelöst. Alternativ könnte man enabledelayedexpansion nutzen (siehe der befehl setlocal). dann muß man die variabeln allerdings mit ! statt mit % markieren.
4. Das errechnen der Zeitdifferenz:
Der Ansatz ist das aufnahmen der Beginnzeit, dann die Aktion, dann das aufnehmen der Endzeit. Danach das verrechnen jeder einzelnen Zeit.
Edit: Ok ich war langsamer....
1. delims und tokens beim For:
Delims gibt die Trennzeichen an.
Tokens sind die Elemente (die durch die Trennziechen getrennt werden) die du haben willst.
Hier ein Paar Beispiele:
FOR /F "tokens=1,2,3 delims=:" %%i in ('echo x:y:z') do echo [%%i] [%%j] [%%k]
FOR /F "tokens=2 delims=:" %%i in ('echo x:y:z') do echo [%%i] [%%j] [%%k]
FOR /F "tokens=1,3 delims=:" %%i in ('echo x:y:z') do echo [%%i] [%%j] [%%k]
2. SET /A %end=%time% funktioniert nicht. Wenn dann SET end=%time%
3. Variabeln in einer klamer (in for oder in if) werden zu beginn des geklammerten blockes aufgelöst. Darin werden sie nicht aktualisiert. Bei for hilft hier meistens der Aufruf einer Unterprozedur mit Übergabe des Variabeln aus For mit "call". In der Unterprozedur werden dann die Vatiabeln wieder aufgelöst. Alternativ könnte man enabledelayedexpansion nutzen (siehe der befehl setlocal). dann muß man die variabeln allerdings mit ! statt mit % markieren.
4. Das errechnen der Zeitdifferenz:
Der Ansatz ist das aufnahmen der Beginnzeit, dann die Aktion, dann das aufnehmen der Endzeit. Danach das verrechnen jeder einzelnen Zeit.
01.
@echo off 02.
FOR /F "tokens=1,2,3,4 delims=:, " %%i in ('echo %time%') do set "starth=%%i" & set "startm=%%j" & set "starts=%%k" & set "starths=%%l" 03.
rem hier dann die Aktion 04.
pause 05.
rem hier ende der Aktion 06.
FOR /F "tokens=1,2,3,4 delims=:, " %%i in ('echo %time%') do set "endh=%%i" & set "endm=%%j" & set "ends=%%k" & set "endhs=%%l" 07.
08.
09.
set /a divhs=endhs-starths 10.
if %divhs% lss 0 ( 11.
set /a divhs=divhs+100 12.
set /a ends=ends+1 13.
) 14.
15.
set /a divs=ends-starts 16.
if %divs% lss 0 ( 17.
set /a divs=divs+60 18.
set /a endm=endm+1 19.
) 20.
21.
set /a divm=endm-startm 22.
if %divm% lss 0 ( 23.
set /a divm=divm+60 24.
set /a endh=endh+1 25.
) 26.
27.
set "T=" 28.
set /a divh=endh-starth 29.
if %divh% lss 0 ( 30.
set /a divh=divh+24 31.
set "T=1:" 32.
) 33.
34.
35.
echo %T%%divh%:%divm%:%divs%:%divhs% 36.
pauseEdit: Ok ich war langsamer....
anve schreibt am 14.11.2008 um 11:23:36 Uhr
Hallo ihr!
Vielen Dank für eure hilfreichen Erklärungen!
Eine weitere Frage hätte ich noch? Wann nehme ich
und wann
Ich brauche ja nicht unbedingt ein Array, aber wie hantle ich mich durch die ganzen Dateien in einem Ordner (muss nicht rekursiv sein) durch? Schon klar mit einer for-Schleife aber wie mache ich das?
Das müsste wahrscheinlich so irgendwie gehen (aber ohne es jetzt als Datei auszugeben):
Oder wäre die einzige Möglichkeit das als Datei auszugeben, wieder einzulesen und die Anzahl der Zeilen zu zählen und anschließend Zeile für Zeile durchgehen?
LG
anve
Vielen Dank für eure hilfreichen Erklärungen!
Eine weitere Frage hätte ich noch? Wann nehme ich
01.
SET /A %i=001.
set Variable=%time%Zitat von bastla:
... womit noch die Frage
>2) Wie kriege ich alle Dateien eins Ordners in eine Variable
(array)?
bliebe - diese allerdings animiert gleich zur Gegenfrage: "Wozu
ein Array?" ( - das gibt es nämlich, wie Du schon
herausgefunden hast, in CMD tatsächlich nicht.)
... womit noch die Frage
>2) Wie kriege ich alle Dateien eins Ordners in eine Variable
(array)?
bliebe - diese allerdings animiert gleich zur Gegenfrage: "Wozu
ein Array?" ( - das gibt es nämlich, wie Du schon
herausgefunden hast, in CMD tatsächlich nicht.)
Ich brauche ja nicht unbedingt ein Array, aber wie hantle ich mich durch die ganzen Dateien in einem Ordner (muss nicht rekursiv sein) durch? Schon klar mit einer for-Schleife aber wie mache ich das?
Das müsste wahrscheinlich so irgendwie gehen (aber ohne es jetzt als Datei auszugeben):
01.
dir /d /on /b > liste.txtOder wäre die einzige Möglichkeit das als Datei auszugeben, wieder einzulesen und die Anzahl der Zeilen zu zählen und anschließend Zeile für Zeile durchgehen?
LG
anve
miniversum schreibt am 14.11.2008 um 11:43:06 Uhr
Wenn du an der Eingabeaufforderung set /? eingibst erhälst du die Hilfe zum Set Befehl. Dort steht unter anderem:
Mit dem Forbefehl kansn tud eine Liste (aus einer Datei oder einem Verzeichnis) durchgehen.
Das geht entweder so:
Die /A-Option gibt an, dass die Zeichenfolge rechts vom Gleichheitszeichen
ein nummerischer Ausdruck ist, der ausgewertet wird. Das Auswertungsprogramm
des Ausdrucks unterstützt dabei die folgenden Vorgänge, entsprechend ihrer
Anordnung mit abnehmendem Vorrang:
() - Gruppierung
! ~ - - monäre Operatoren
ein nummerischer Ausdruck ist, der ausgewertet wird. Das Auswertungsprogramm
des Ausdrucks unterstützt dabei die folgenden Vorgänge, entsprechend ihrer
Anordnung mit abnehmendem Vorrang:
() - Gruppierung
! ~ - - monäre Operatoren
- / % - arithmetische Operatoren
<< >> - logische Verschiebung
& - bitweise UND
^ - bitweise exklusives ODER
| - bitweise ODER
= *= /= %= += -= - Zuordnung
&= ^= |= <<= >>=
, - Trennzeichen für Ausdrücke
Wenn Sie einen der arithmetischen oder Moduloperatoren verwenden, müssen
Sie die Zeichenfolge für den Ausdruck in Anführungszeichen setzen. Alle
nicht-nummerischen Zeichenfolgen im Ausdruck werden als Zeichenfolgen von
Umgebungsvariablen behandelt, deren Werte vor der Verwendung in Zahlen
konvertiert werden. Wenn eine Umgebungsvariable angegeben wird, die nicht
definiert ist, wird für diese der Wert Null verwendet. Somit können Sie
mit Umgebungsvariablen Berechnungen vornehmen, ohne %-Zeichen einzugeben,
um deren Werte zu erhalten. Wenn der Befehl SET /A von der Befehlszeile,
d.h. außerhalb eines Befehlsskripts ausgeführt wird, dann zeigt er
den endgültigen Wert des Ausdrucks an. Der Zuordnungsoperator erfordert
eine Umgebungsvariable auf der linken Seite des Operators. Nummerische Werte
stellen immer Dezimalzahlen dar, es sei denn, sie haben ein Präfix 0x für
hexadezimale Zahlen, 0b für binäre Zahlen oder 0 für oktale Zahlen. Damit
stellt 0x12 dieselbe Zahl wie 18 oder 022 dar. Beachten Sie, dass die oktale
Schreibweise verwirrend sein kann: So sind 08 und 09 keine gültigen Zahlen,
da 8 und 9 keine erlaubten oktalen Ziffern sind.
Mit dem Forbefehl kansn tud eine Liste (aus einer Datei oder einem Verzeichnis) durchgehen.
Das geht entweder so:
FOR /R x:\Pfad %i IN (*.*) DO echo %i
oder so:dir /d /on /b > liste.txt
FOR /F "delims=" %i in (liste.txt) do echo %i
oder abgekürzt:FOR /F "delims=" %i in (liste.txt) do echo %i
FOR /F "delims=" %i in ('dir /d /on /b') do echo %i
bastla schreibt am 14.11.2008 um 11:44:58 Uhr
Hallo anve!
) mit
Ansonsten mit
Das "delims=" ersetzt die Standardtrennzeichen Leerzeichen und TAB durch "Nichts", wodurch der Dateiname nicht nur bis zum ersten enthaltenen Leerzeichen in %%i übernommen wird - deshalb dann auch die Anführungszeichen, da ja in %%i so auch ein oder mehrere Leerzeichen enthalten sein können (was zwar für "echo" egal wäre, nicht allerdings für "ren", "copy", "move", etc).
Die "for /f"-Variante ist dann sinnvoll (bzw notwendig), wenn Du eine Sortierung benötigst oder eine Einschränkung (wie hier: "/a-d" für "keine Verzeichnisse") vornehmen willst.
Grüße
bastla
[Edit] @miniversum 1:1
[/Edit]
Eine weitere Frage hätte ich noch? Wann nehme ich
Die Antwort solltest Du eigentlich mit "set /?" schon gefunden haben: "/A" steht für "arithmetisch" - dies dann, wenn eine Berechnung vorgenommen oder zumindest darauf hingewiesen werden soll, dass eine numerische Variable gemeint ist.SET /A %i=0
und wannset Variable=%time%
wie hantle ich mich durch die ganzen Dateien in einem Ordner
Im einfachsten Fall (steht bei "for /?" for %%i in ("D:\Dein Ordner\*.*") do echo "%%i"for /f "delims=" %%i in ('dir /b /on /a-d "D:\Dein Ordner\*.*"') do echo "%%i"Die "for /f"-Variante ist dann sinnvoll (bzw notwendig), wenn Du eine Sortierung benötigst oder eine Einschränkung (wie hier: "/a-d" für "keine Verzeichnisse") vornehmen willst.
Grüße
bastla
[Edit] @miniversum 1:1







