Ich habe eine Windows-Batchdatei (Windows 7/2008 R2), die täglich eine Sicherungskopie der Datei erstellt (Oracle-Dump-Exportdatei, z. B. dump-2016-10-17.DMP).
Ich möchte die Dateigröße (in einer Variablen) hinzufügen, die entsprechend der Größe in KB / MB / GB angegeben werden soll, oder zumindest die Dateigröße in MB. CODE:
@echo off
SET DONE=0
SET Bytes=%~z1
SET KB=%Bytes:~0,-3%
SET MB=%Bytes:~0,-6%
SET GB=%Bytes:~0,-9%
SET TB=%Bytes:~0,-12%
rem echo %~f1
IF "%KB%" EQU "" SET DONE=B
IF %DONE% EQU B echo Size is... %Bytes% Bytes
IF %DONE% EQU B GOTO END
IF "%MB%" EQU "" SET DONE=K
IF %DONE% EQU K SET /a KB=(%BYTES%/1024)+1
IF %DONE% EQU K echo Size is... %KB% KB
IF %DONE% EQU K GOTO END
IF "%GB%" EQU "" SET DONE=M
IF %DONE% EQU M SET /a MB=(%BYTES%/1048576)+1
IF %DONE% EQU M echo Size is... %MB% MB
IF %DONE% EQU M GOTO END
IF "%TB%" EQU "" SET DONE=M
IF %DONE% EQU M SET /a MB=%KB%/1049
IF %DONE% EQU M echo Size is... %MB% MB (approx)
IF %DONE% EQU M GOTO END
SET DONE=G
IF %DONE% EQU G SET /a GB=%MB%/1074
IF %DONE% EQU G echo Size is... %GB% GB (approx)
IF %DONE% EQU G GOTO END
:END
windows
windows-8
batch-file
Syed Jahanzaib
quelle
quelle
@echo off SET DONE=0 SET Bytes=%~z1 SET KB=%Bytes:~0,-3% SET MB=%Bytes:~0,-6% SET GB=%Bytes:~0,-9% SET TB=%Bytes:~0,-12% echo %~f1 IF "%GB%" EQU "" SET DONE=M IF %DONE% EQU M SET /a MB=(%BYTES%/1048576)+1 IF %DONE% EQU M echo Size is... %MB% MB IF %DONE% EQU M GOTO END :END
Antworten:
Alternativ können Sie die Ausgabe von verwenden
robocopy
Befehl zum Abrufen der erforderlichen Informationenrobocopy
wird nur zum Auflisten verwendet (/l
) die Informationen der zu kopierenden Datei, entfernen nicht benötigte Informationen aus der Ausgabe (der Rest der Schalter) und verwenden afor /f
Befehl, um die Ausgabezeilen zu tokenisieren und nur die Dateigröße zu lesenIm Fall von Ordnern kann dieselbe Idee verwendet werden, aber anstatt die Daten aus der Dateiliste zu lesen, können wir ein rekursives verwenden "Kopieren" und rufen Sie die Daten aus der Jobübersicht ab
Die Optionen wurden geändert, um nur die Jobübersicht abzurufen, und um nur die Zeile zu lesen, die die enthält
Bytes
Information.bearbeitet 2016/10/26 - Die Robocopy-Schalter wurden geändert, um Berechtigungsproblemen entgegenzutreten
Byte:
Abruf nach:
Zeilenfilter plus Skip-Klausel für den Fall, dass es ein Gebietsschema ohne das gibtBytes:
Zeichenfolge, Erkennung geänderter Speichereinheiten.quelle
Eine Lösung wäre, den Stapel aus Ihrem anderen Stapel heraus aufzurufen und die Sicherungsdatei als Argument zu verwenden. Sie erhalten die Größe als Text und können diese in einer Variablen speichern.
Um es "inline" zu machen, könnten Sie es in einer Schleife wie dieser verwenden:
Aus Sicht der Lesbarkeit wäre die erste Lösung besser.
quelle
Vielen Dank für die Unterstützung und Richtlinien.
Ich habe es endlich geschafft, es durch Herunterladen der zu lösen
ls
für Windows und mitls -lh filename
Ich erhalte die benötigten Informationen zusammen mit anderen Informationen.Beispiel:
quelle