Hier ist ein kommentierte Batch-Code für diese Aufgabe:
@echo off
setlocal
rem Define source and backup path.
set "SourcePath=C:\machines\models"
set "BackupPath=E:\backup"
rem Get current date in format YYYY-MM-DD independent on local date format.
for /F "skip=1 tokens=1 delims=." %%T in ('%SystemRoot%\System32\wbem\wmic.exe OS get localdatetime') do set LocalDateTime=%%T & goto ReformatDate
:ReformatDate
set "YearMonthDay=%LocalDateTime:~0,4%-%LocalDateTime:~4,2%-%LocalDateTime:~6,2%
rem For each subfolder in source path check if there is a subfolder "defects".
rem If subfolder "defects" exists, copy all files and subfolders of "defects"
rem to the appropriate backup directory with current date and subfolder name
rem in source folder path. Then remove the subfolder "defects" in source
rem folder even if being completely empty to avoid processing this folder
rem again when not being recreated again in the meantime.
for /D %%# in ("%SourcePath%\*") do (
if exist "%%#\defects\*" (
%SystemRoot%\System32\xcopy.exe "%%#\defects\*" "%BackupPath%\%YearMonthDay%\%%~nx#_defects\" /H /I /K /Q /R /S /Y >nul
rd /Q /S "%%#\defects"
)
)
endlocal
Run einmal in Eingabeaufforderung Fenstern wmic OS get localdatetime
zu sehen, was dieser Befehl gibt, besser zu verstehen, wie das aktuelle Datum YYYY-MM-DD
im Format bestimmt wird. Es wäre schneller, %DATE%
zu verwenden, aber das Format der Datumszeichenfolge von %DATE%
hängt von dem in den Windows-Regions- und Spracheinstellungen festgelegten Land ab und erfordert daher Kenntnis des Datumszeichenkettenformats auf dem Computer, auf dem diese Batchdatei ausgeführt wird.
Der Befehl XCOPY mit den verwendeten Optionen nicht den Unterordner in Sicherungsverzeichnis erstellen, wenn ein defects
Unterordner in einem Verzeichnis models
ist, sondern in ganzem defects
Unterordner Baum ist es nicht zuletzt auf 1 Datei zu kopieren.
Alternativer Code mit Umgebungsvariable DATUM mit der Erwartung, dass der erweiterte Datumsstring endet mit: MM/DD/YYYY
, z. Tue 05/17/2016
, erklärt im Detail in Antwort auf:
What does %date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2% mean?
@echo off
setlocal
rem Define source and backup path.
set "SourcePath=C:\machines\models"
set "BackupPath=E:\backup"
rem Get current date in format YYYY-MM-DD depending on local date format.
set "YearMonthDay=%DATE:~-4,4%-%DATE:~-10,2%-%DATE:~-7,2%"
rem For each subfolder in source path check if there is a subfolder "defects".
rem If subfolder "defects" exists, copy all files and subfolders of "defects"
rem to the appropriate backup directory with current date and subfolder name
rem in source folder path. Then remove the subfolder "defects" in source
rem folder even if being completely empty to avoid processing this folder
rem again when not being recreated again in the meantime.
for /D %%# in ("%SourcePath%\*") do (
if exist "%%#\defects\*" (
%SystemRoot%\System32\xcopy.exe "%%#\defects\*" "%BackupPath%\%YearMonthDay%\%%~nx#_defects\" /H /I /K /Q /R /S /Y >nul
rd /Q /S "%%#\defects"
)
)
endlocal
für die verwendeten Befehle verstehen und wie sie arbeiten, eine Eingabeaufforderung öffnen, führen Sie dort die folgenden Befehle ein, und für jede vollständig alle Hilfeseiten angezeigt lesen Befehl sehr sorgfältig.
echo /?
endlocal /?
for /?
... erklärt auch %%~nx#
(Name (und Erweiterung) von Modellen Unterordner).
if /?
rd /?
set /?
setlocal /?
wmic.exe OS get /?
xcopy /?
Siehe auch den Microsoft Artikel über Using command redirection operators die Bedeutung von >nul
zu verstehen.
Warum %%~nx#
und nicht nur %%~n#
als ein Ordner nicht über eine Dateierweiterung?
Der Windows-Befehlsprozessor ermittelt nicht, ob eine Zeichenfolge ein Ordner oder ein Dateiname ist. Alles nach dem letzten Backslash wird als Dateiname interpretiert, unabhängig davon, ob es sich um den Namen einer Datei oder eines Ordners handelt. Und alles nach dem letzten Punkt nach dem letzten umgekehrten Schrägstrich in der Zeichenfolge wird als Dateierweiterung interpretiert, auch wenn dies bedeutet, dass der mit %~n
referenzierte Ordner- oder Dateiname eine leere Zeichenfolge ist, da der Ordner/Dateiname mit einem Punkt beginnt und keinen mehr enthält Punkt wie viele "versteckte" Dateien auf * nix-Systemen haben, z .htaccess
. Daher sollte %~nx
immer verwendet werden, wenn der gesamte Name eines Ordners oder einer Datei in einer Befehlszeile benötigt wird.
Willkommen bei SO. Bitte lesen [mcve]. Bitte geben Sie einen Code hier .. – sjsam
Mit Danksagungen sjsam. Will etwas Code hier setzen, sobald ich im Stapelcode gut bin :) –
Sie können _good im Stapelcodieren nicht werden, ohne zu versuchen (und zu verwechseln :)) – JosefZ