2016-01-01 3 views
-2

Я хочу знать, как я могу использовать пакетный файл для копирования файла из одного каталога в другой каталог, а затем называть его динамическим именем, которое использует дату резервного копирования в качестве имени. Я знаю, как скопировать файл в новый DIR с помощью xcopy (который является медленным с размером файлов, которые я копирую), но я не могу понять, как назвать динамическую папку, в которую они копируются. [если у кого есть более быстрое решение, я его услышу]Динамическое присвоение имени FOLDER для резервного копирования

Я пытался понять это, и я знаю, что этот вопрос задан раньше, и я попытался его исследовать широко, но я «Мне трудно понять, как это работает.

ответ

0

Я закончил с использованием этого:

@echo off 

REM Find Current Year 
set varYear=%date:~-4,4% 

REM Find Current Month 
set varMonth=%date:~-7,2% 

REM Find Current Day 
set varDay=%date:~-10,2% 

REM Find Hour 
set varHour=%time:~-11,2% 

if %varHour% leq 9 (
call :trim %varHour% 
goto :eof 
:trim 
set varHour=0%* 
) 
:eof 

REM Find Minutes 
set varMinutes=%time:~-8,2% 

REM Compile Date 
set DateTime=%varDay%.%varMonth%.%varYear%__%varHour%.%varMinutes% 


mkdir "C:\New\Backup\Folder\%DateTime%_Backup" 


xcopy /i "C:\Remote\Server" "C:\New\Backup\Folder\%DateTime%_Backup" /D/S/H/V/C/F/K/Y 

exit 

я не в конечном итоге, использовать для команды. Я не могу понять, как это работает.

0

Запустите этот пакетный код, и вы можете увидеть, как получить текущую дату, назначенную переменной окружения FolderDate для использования в имени папки резервного копирования.

@echo off 

rem Get the current local date and time in a region and language 
rem independent format by using Windows Management Instrumentation. 

for /F "skip=1 delims=." %%T in ('%SystemRoot%\System32\wbem\wmic.exe OS get localdatetime') do set "LocalDateTime=%%T" & goto ReformatDate 

rem Convert the date and time string in format yyyymmddhhmmss like 
rem 20151231150357 to a readable format with date only like 2015-12-31. 

:ReformatDate 
set "FolderDate=%LocalDateTime:~0,4%-%LocalDateTime:~4,2%-%LocalDateTime:~6,2%" 

rem Output the date string for the backup folder and delete the 2 variables. 

echo Date for backup folder is: %FolderDate% 
echo. 
set "LocalDateTime=" 
set "FolderDate=" 
pause 

чтения, например, ответ на Find out if file is older than 4 hours in Batch file и ответы на Batch file to delete files older than N days для получения подробной информации о получении и дата и время строки форматирования.

Использование значения переменной окружения ДАТА переформатировать для имени папки в формат yyyy-mm-dd будет гораздо быстрее, чем при использовании wmic. Но использование DATE требует знания формата даты на используемой машине из-за зависимости от настроек региона и языка.

Чтобы понять используемые команды и как они работают, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.

  • echo /?
  • for /?
  • pause /?
  • rem /?
  • set /?
  • wmic /?

Также желательно, чтобы запустить wmic OS get localdatetime из окна командной строки, чтобы просмотреть вывод этой командной строки, обработанный командой , для и, наконец, в результате получается строка даты в формате yyyy-mm-dd для использования в имени папки резервного копирования.

+0

Благодарим вас за это. Я получаю, где это происходит, но команда FOR не нужна для того, что мне нужно. Я действительно ценю помощь, хотя –

+0

@DakotaZinn. Команда __FOR__ в ответе выше необходима для вывода вывода __wmic__, обычно записываемого в окно консоли, захваченного __FOR__ и уже усеченного в первый период, назначенного переменной окружения 'LocalDateTime'. Вам не нужно __FOR__ в вашем пакетном коде, поскольку вы используете непосредственно зависящие от региона переменные среды __DATE__ и __TIME__, как я уже сказал. Я не мог предложить решение с использованием __DATE__ и __TIME__, поскольку вы не писали о них, которые форматируют строки этих двух переменных на вашем компьютере. – Mofi

Смежные вопросы