Bei der Arbeit behalte ich oft ein Backup meiner Materialien. Der Hauptgrund ist die Dateiversionierung.
Die Methode besteht darin, die Datei im Explorer zu kopieren und Datum und Uhrzeit in den Dateinamen einzugeben, damit Sie das Änderungsdatum und die Änderungszeit jeder Datei sehen können, bevor Sie die neueste Version ändern. Es sieht so aus (↓).
Es gibt viele Dienste auf der Welt, die Dateiversionen bequem verwalten können, wie z. B. Box, und ich denke, viele Leute verwenden sie. Dieses Verfahren hat jedoch auch Vorteile.
Andererseits ist der ** problematische Punkt ** dieser Verwaltungsmethode, dass das Verfahren wie folgt kompliziert ist.
[Strg] + [C]
→ [Strg] + [V]
)Es stört mich kein einziges Mal, aber wenn ich das jeden Tag und viele Male wiederhole, wird es ziemlich nervig. Wenn ich aufgrund eines Tippfehlers einen Fehler im Datum gemacht habe, wird die Aktualisierungsreihenfolge beim Anordnen nach Dateinamen unterbrochen.
Also habe ich beschlossen, ein Werkzeug zu machen und es einfacher zu machen. Die Bedingung ist, dass die Datei mit dem Namen "-latest" unmittelbar vor der Dateierweiterung angezeigt wird, z. B. "Proposal -latest.docx".
Wenn Sie die Datei per Drag & Drop auf das Tool im Explorer ziehen, wird sie automatisch gesichert und der Dateiname aktualisiert. Eine Batch-Datei namens "backup.bat" ist ein Tool, und Sie ziehen die Zieldatei einfach per Drag & Drop in die Batch-Datei.
In der Batch-Datei werden Java-Programme ausgeführt.
Die folgende Abbildung zeigt das Ausführungsergebnis.
Dies ist praktisch, da Sie eine Sicherung mit nur einem Klick durchführen können.
Der Quellcode sieht so aus. Es funktioniert mit einer Kombination aus Java- und Batch-Dateien. Kompilieren Sie Ihr Java-Programm und legen Sie die Klassen- und Batchdateien in demselben Ordner ab.
Ziehen Sie zum Zeitpunkt der Ausführung die Datei, die Sie sichern möchten, in die Batchdatei im Explorer und legen Sie sie dort ab (siehe Abbildung oben). Erstellen Sie eine Sicherung im selben Ordner wie die Zieldatei.
In meinem Fall erstelle ich außerdem eine Verknüpfung für das Tool (Batchdatei) auf dem Desktop und ziehe sie per Drag & Drop auf die Verknüpfung.
CopyAndBackupFile.java
import java.net.*;
import java.nio.file.*;
import java.text.*;
import java.util.*;
public class CopyAndBackupFile {
private static final String DEFAULT_PLACE_HOLDER = "latest";
private static final SimpleDateFormat FORMAT_PREFIX = new SimpleDateFormat("YYYYMMdd");
private static final SimpleDateFormat FORMAT_SUFFIX = new SimpleDateFormat("HHmm");
public static void main(String[] args) throws Exception {
int argc = 0;
String placeHolder;
if (args[argc].equals("-p")) {
placeHolder = args[++argc];
++argc;
} else {
placeHolder = DEFAULT_PLACE_HOLDER;
}
assert placeHolder != null : "Placeholder is null";
Path[] paths = new Path[args.length - argc];
for (int i = 0; i < paths.length; i++, argc++) {
paths[i] = Paths.get(args[argc]);
}
rename_loop:
for (int i = 0; i < paths.length; i++) {
Path pathOrg = Paths.get(paths[i].toString());
Path dir = pathOrg.getParent();
Path file = pathOrg.getFileName();
String sFile = file.toString();
int phStart = sFile.lastIndexOf(placeHolder);
if (phStart < 0) {
System.err.printf("ERROR: %s does not include \"%s\"%n", sFile, placeHolder);
continue rename_loop;
}
int phEnd = phStart + placeHolder.length();
long lastModified = pathOrg.toFile().lastModified();
Date date = new Date(lastModified);
String backupDate = FORMAT_PREFIX.format(date)
.concat("T")
.concat(FORMAT_SUFFIX.format(date));
String sFileNew = sFile.substring(0, phStart)
.concat(backupDate)
.concat(sFile.substring(phEnd));
Path pathNew = Paths.get(dir.toString(), sFileNew);
System.out.printf("%s -> %s%n", pathOrg, pathNew);
Files.copy(pathOrg, pathNew);
}
}
}
backup.bat
@echo off
setlocal
rem
rem The top directory of the tool
rem
set __tools_dir=%~d0%~p0
set __last_char=%__tools_dir:~-1%
if "%__last_char%"=="\" set __tools_dir=%__tools_dir:~0,-1%
rem
rem Environment variables
rem
set __java_bin_dir=C:\ProgramData\Oracle\Java\javapath
set __classpath=%__tools_dir%
if "%JAVA_HOME%"=="" (
echo WARNING: JAVA_HOME is empty. Using %__java_bin_dir%
) else (
set __java_bin_dir=%JAVA_HOME:"=%\bin
)
if not exist "%__java_bin_dir%\java.exe" (
echo ERROR: %__java_bin_dir%\java.exe does not exist
echo ERROR: set JAVA_HOME to the top directory of Java SE 7 or later
goto :EOF
)
set __java_options=
rem
rem Run
rem
@echo on
"%__java_bin_dir%\java.exe" %__java_options% -classpath "%__classpath%" CopyAndBackupFile %*
@echo off
@endlocal
Es gab eine falsche Beschreibung, dass "Box" ein "Microsoft-Dienst" ist, daher habe ich ihn korrigiert. Wir entschuldigen uns für die Korrektur.
Recommended Posts