2016-01-01 70 views
-2

我想知道我可以使用批處理文件將文件從一個目錄複製到另一個目錄,然後將其命名與使用備份作爲名稱的日期動態名。 我知道如何使用xcopy將文件複製到新的DIR(這與我複製的文件的大小相比很慢),但我無法弄清楚如何命名它們被動態複製到的文件夾。 [如果任何人有一個更快的解決方案,我會聽到它]動態的命名備份文件夾

我一直在試圖弄清楚這一點,我知道這個問題已經被問過了,我試着廣泛研究,但我我很難理解它是如何工作的。

回答

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 

我沒有最終不得不使用FOR命令。我似乎無法理解它是如何工作的

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的答案。

環境變量值的使用DATE將文件夾名格式化爲格式yyyy-mm-dd會比使用wmic快得多。但使用日期需要知道所用機器上的日期格式,因爲取決於地區和語言設置。

爲了解所使用的命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀爲每個命令顯示的所有幫助頁面。

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

它也建議運行wmic OS get localdatetime從命令行窗口看到這個命令行的輸出內命令正在處理並最終導致格式yyyy-mm-dd日期字符串用於備份文件夾的名稱的使用。

+0

謝謝你。我明白了這一點,但對於我所需要的,FOR命令是不必要的。我也明白,雖然 –

+0

@DakotaZinn以上需要回答的命令__FOR__獲得通常寫入到控制檯窗口由__FOR__捕獲並已經截斷分配給環境變量'LocalDateTime'第一期__wmic__輸出的幫助。您在批處理代碼中不需要__FOR__,因爲您正在使用直接依賴於區域的環境變量__DATE__和__TIME__,正如我所建議的那樣。我無法使用__DATE__和__TIME__提供解決方案,因爲您沒有寫過關於您的計算機上這兩個變量的字符串格式的問題。 – Mofi