Ich weiß Batch ist ein altes Format und übermäßig kompliziert im Vergleich zu PowerShell, aber ich muss Batch verwenden, um sicherzustellen, dass es mit vielen älteren Windows-Maschinen kompatibel ist.Ausgabe eines Verzeichniserstellungsdatums auf eine Variable in BATCH
Ich erstelle ein Backup-Skript, um zu überprüfen, ob die Speicherverfügbarkeit auf dem Backup-Laufwerk ausreicht, um die Daten auf dem Computerlaufwerk zu speichern.
Wenn nicht genügend Speicherplatz vorhanden ist, muss das Skript das erste gefundene Backup und sein Erstellungsdatum finden, es verlassen und das nächste Datum löschen. Überprüfen Sie dann, ob ein Backup wieder realisierbar ist.
Das Problem, das ich habe, ist das älteste datierte Verzeichnis zu finden und es in eine Variable zu setzen, dann das nächstälteste Verzeichnis zu finden und es zu entfernen, dann Speicherplatz erneut zu prüfen. Diese
ist, was ich für die Überprüfung der Skript:
:spaceAvailable
ECHO Checking disk space availablility...
::Sets Free variable to available space (approximate) of external drive
FOR /F "tokens=3" %%a IN ('dir /-c %usb%\ ^| FIND /i "bytes free"') DO SET Free=%%a
SET Free=%Free:~0,-9%
IF "%Free%"=="" SET Free=0
::Sets Used variable to size of Users directory
FOR /F "tokens=3-4" %%v IN ('dir "C:\Users\" /s ^| FIND /i "file(s)"') DO SET Used=%%v
SET Used=%Used:~0,-12%
IF "%Used%"=="" SET Used=0
::Compares the variables Free and Used
::If Free is more than Used, the backup will continue
::if not, system will prompt to free up space
IF %Free% GTR %Used% (
ECHO Enough disk space is available
goto backUp
)
IF %Used% GTR %Free% (
::INSERT CODE TO LOCATE SECOND OLDEST DIRECTORY HERE
ECHO There is not enough space, press any key to erase %oldDir%
PAUSE
goto spaceAvailable
)
Ich habe eine Reihe von Dingen, wurde mit dem Verzeichnis Datum zu erhalten, und es scheint, „unmöglich“ für Charge. Ich muss das für die Arbeit tun und bin seit ein paar Tagen dran. Danke für die Hilfe!
EDIT: Dank Stephen für die Beantwortung, das war genau das, was ich gesucht habe. Für diejenigen von euch, die sich gefragt haben, was der fertige Code ist, werde ich es hier posten! Danke nochmal für die Hilfe.
@ECHO OFF
::xCopy for data transfer of all user information to an external drive.
::Created by Benjamin Chaney
::Version notes-
::V1.0 - Initial release
::V1.1 - Replaced XCOPY commands with updated ROBOCOPY commands
::V1.2 - Created script to verify date and create a directory of todays date
:: in YYYY_MM_DD format on backup drive.
:: Also created checks for administrative rights, outlook being opened
:: and if the backup drive is plugged in.
::V1.3 - Fixed bugs where it would give an error giving an invalid destination
::V1.4 - Enhanced the ROBOCOPY command to be more efficient
::V1.5 - Created an audio queue when backup is finished.
::V1.6 - Script checks for if there is enough disk space on the drive before the backup
::V1.7 - Updated to remove second oldest directory in backup drive if no space is available
ECHO ***********************************************************************
ECHO *************************HelpDesk Backup V1.7**************************
ECHO ***********************************************************************
ECHO **Welcome to the HelpDesk Backup assistant! This will copy all of the**
ECHO **important information on your computer into your external Backup **
ECHO **Drive. Before you begin, there are a few steps to complete: **
ECHO ** 1. Plug in your external backup drive into your computer **
ECHO ** 2. Be sure the name of your Drive is BACKUP. **
ECHO ** -Click on the File Explorer folder (Yellow folder with a blue **
ECHO ** holder, usually next to the start icon) **
ECHO ** -A windows will open, left-click on This PC on the left panel **
ECHO ** -You should see a number of folders and drives. Locate your **
ECHO ** external drive (usually either D: or E:), and right-click on **
ECHO ** the drive for more options, then left-click on Rename. **
ECHO ** -Type in BACKUP and press ENTER **
ECHO ** 3. Please close all programs, documents, and web pages before the **
ECHO ** process begins. **
ECHO ***********************************************************************
ECHO ***********************************************************************
PAUSE
:adminTEST
::Verify script has administrative rights. If not, close out of program.
echo Checking administrative rights...
net session >nul 2>&1
IF %errorLevel% == 0 (
ECHO Success: Administrative permissions confirmed.
goto outlookTEST
) ELSE (
ECHO Failure: Please run the program in Administrative mode.
PAUSE
EXIT
)
ECHO Verifying programs are closed...
:outlookTEST
::Verifies Outlook is closed before backup begins. If it is still open, prompts user to close the program, then re-run the program
tasklist /fi "imagename eq OUTLOOK.EXE" |find ":" >nul
if errorlevel 1 (
ECHO Your Outlook is still open, please close out of Outlook and try again.
PAUSE
GOTO outlookTEST
)
goto driveLookup
:driveLookup
ECHO Finding HDD labeled "BACKUP"
::Obtain drive letter for BACKUP (the name of the external drive)
FOR /f %%D in ('wmic volume get DriveLetter^, Label ^| find "BACKUP"') DO set usb=%%D
IF [%usb%]==[] (
ECHO BACKUP drive is not plugged into the system! Please connect the drive now and try again.
PAUSE
GOTO driveLookup
) ELSE (
ECHO Found Backup drive! Located at %usb%
)
:spaceAvailable
ECHO Checking disk space availablility...
::Sets Free variable to available space (approximate) of external drive
FOR /F "tokens=3" %%a IN ('dir /-c %usb%\ ^| FIND /i "bytes free"') DO SET Free=%%a
SET Free=%Free:~0,-9%
IF "%Free%"=="" SET Free=0
::Sets Used variable to size of Users directory
FOR /F "tokens=3-4" %%v IN ('dir "C:\Users\" /s ^| FIND /i "file(s)"') DO SET Used=%%v
SET Used=%Used:~0,-12%
IF "%Used%"=="" SET Used=0
::Compares the variables Free and Used
::If Free is more than Used, the backup will continue
::if not, system will prompt to free up space
IF %Free% GTR %Used% (
ECHO Enough disk space is available
goto backUp
)
IF %Used% GTR %Free% (
SET /P c=Would you like us to clear some space[Y/N]?
)
IF /I "%c%"=="Y" GOTO removeDirectory
IF /I "%c%"=="N" GOTO clearSpace
ECHO Didnt work
PAUSE
)
:removeDirectory
::Sets variables for oldest and second oldest directory, then removes second
::oldest directory.
SET "dir1="
SET "dir2="
FOR /F "delims=" %%a IN ('dir %usb%\Backup\ /tc /ad /od /b') DO (
IF defined dir2 goto removeNext
IF defined dir1 SET "dir2=%%a" & goto removeNext
SET "dir1=%%a"
)
:removeNext
::Removes the second oldest directory in the Backup drive
ECHO Removing directory "%usb%\Backup\%dir2%
ECHO Please wait while we clear some space...
RD /S /Q "%usb%\Backup\%dir2%
IF errorlevel 0 (
GOTO clearSpace
)
GOTO spaceAvailable
:clearSpace
ECHO Please manually remove files in your backup drive (%usb%)
ECHO to clear up at least %Used%GB of space before backing up!
PAUSE
EXIT
:backUp
ECHO Starting backup process
::Sets string "today" with todays date in YYYY_MM_DD format
SET today=%Date:~10,4%_%Date:~7,2%_%Date:~4,2%
::Script to copy all contents out of the c:/users into external drive
IF EXIST "%usb%\Backup\%today%" (
GOTO roboCOPY
) ELSE (
MKDIR %usb%\Backup\%today%
ECHO Created backup folder labeled "%today%"
)
:roboCOPY
ECHO ***************************************************************************
ECHO ***************************************************************************
ECHO **Your computer is now being backed up. Please wait, this may take a **
ECHO **while depending on how much information needs to be backed up. **
ECHO **Once finished, you should hear the notification sound. Please wait. **
ECHO ***************************************************************************
ECHO ***************************************************************************
ROBOCOPY C:\Users\ %usb%\Backup\%today%\Users\ /MIR /XA:SH /W:0 /R:1 /REG /XJ /LOG:%usb%\Backup\BackupLog.txt
ECHO
ECHO ****************************************************************************
ECHO ****************************************************************************
ECHO **Your backup is complete! Your backup is located in %usb%\Backup\%today% **
ECHO **You can view the log of your backup at %usb%\Backup\BackupLog.txt. **
ECHO **Thank you for using the Help Desk Backup Assistant. Please contact us **
ECHO **if you have any questions at ********** or at ******************* **
ECHO ****************************************************************************
ECHO ****************************************************************************
PAUSE
EXIT
vielleicht sind Sie in einer Art und Weise zu interessieren [Erhalten Sie Ihr Datum unabhängig vom lokalisierten Datumsformat] (http://stackoverflow.com/a/18024049/2152082). – Stephan