विंडोज बैच फ़ाइल एक नए फ़ोल्डर में नवीनतम फ़ाइलों को कॉपी करने के लिए


1

मैं एक फ़ोल्डर से नवीनतम फ़ाइल और उसके सबफ़ोल्डर्स को एक नए स्थान पर कॉपी करना चाहता हूं।

निम्न कोड अच्छी तरह से काम करता है, लेकिन BUT I दिनांक और समय (/ O: D) द्वारा फ़िल्टर नहीं करना चाहता, लेकिन DATE केवल, ताकि एक ही तिथि से सभी नवीनतम फ़ाइलों को नवीनतम फ़ाइलों के रूप में नए स्थान पर कॉपी कर लिया जाए।

FOR /F "delims=|" %%I IN ('DIR "D:\Backups\DB\*.bak" /B /O:D /S') DO SET NewestFile=%%I
copy "%NewestFile%" "D:\Backups\DB\Latest"

जवाबों:


2

उपाय

निम्न बैच स्क्रिप्ट का उपयोग करता है forfiles कमांड, जो कि Windows XP में डिफ़ॉल्ट रूप से उपलब्ध नहीं है। यदि वह ऑपरेटिंग सिस्टम आपके द्वारा उपयोग किया जाता है, तो आपको करना होगा इसे मैनुअली डाउनलोड करें । जबकि वाक्य रचना समान है, यह समान नहीं है

@echo off

REM set the working directory
pushd "D:\Backups\DB"

REM get the latest modified .bak file
for /f "delims=" %%G in ('dir *.bak /b /o:-d /s 2^>nul') do (

REM copy the newest files
call :copyNewest %%G "Latest"

REM restore the previous working directory
popd
goto:EOF
)

:copyNewest
setlocal

REM make sure there's something to copy
if "%~1" == "" exit /b

REM check output folder
if "%~2" == "" exit /b

REM get the file path
set filePath=%~dp1

REM strip the trailing backslash char
set filePath=%filePath:~0,-1%

REM copy latest files which share the same date
for /f "delims=" %%G in ('"forfiles /p "%filePath%" /m "%~nx1" /c "cmd /c echo @fdate""') do (
forfiles /p "%cd%" /m *.bak /s /c "cmd /c echo @relpath | findstr /i /c:"\%~2" >nul || copy @path "%cd%\%~2" >nul" /d %%G
)
endlocal & exit /b
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.