使用批处理脚本,我想使用特定日期将文件复制到文件夹。我不想在指定日期之后复制文件,我只想要修改日期正好是指定日期的文件。
我在指定的日期之后使用了XCOPY但/ D参数复制文件在AND上。 示例:
XCOPY "D:\FOLDER" "V:\FOLDERBIS" /K /R /Y /I /D:05-25-2015 /E
这将复制修改日期大于或等于2015年5月25日的文件,我只想要修改日期等于此特定日期的文件。
另外,我不能使用ROBOCOPY。你有什么想法吗?
答案 0 :(得分:2)
如果您不能使用forfiles
(Win XP及以上版本),也许您可以使用robocopy
(Win 7或更高版本):
forfiles /D "2.06.2015" /c "cmd /c if @fdate EQU "02.06.2015" echo @file @fdate"
使用此命令的原因是它已经解析了日期。
答案 1 :(得分:1)
@echo off
set "_date=20150525"
set "directory=D:\FOLDER"
for %%# in (%directory%) do (
set "_path=%%~pn#"
set "_drive=%%~d#"
)
set "_path=%_path:\=\\%\\"
setlocal enableDelayedExpansion
for /f "tokens=* delims=" %%# in ('wmic datafile where "path='%_path%' and drive='%_drive%' " get LastModified^,Caption /Format:value') do (
for /f "tokens=1,2 delims==" %%A in ("%%#") do (
if "%%A" equ "Caption" (
set _fpath=%%B
)
if "%%A" equ "LastModified" (
set _time=%%B
if !time:~0,8! equ %_date% (
echo file !_fpath! has been created on !_time!
rem :: remove echo if everything is ok
echo copy "!_fpath!" "V:\FOLDERBIS"
)
)
)
)
编辑:使用wmic查询过滤的文件日期
@echo off
set "_date=20150525"
set "directory=D:\FOLDER"
:: time zone is not used to deal better with - and + signs
for /f %%$ in ('wmic os get LastBootUpTime /format:value') do (
for /f %%# in ("%%$") do set "%%#"
)
set offset=%LastBootUpTime:~21,4%
set "edate=%_date%235959.999999%offset%"
set "bdate=%_date%000000.000000%offset%"
for %%# in (%directory%) do (
set "_path=%%~pn#"
set "_drive=%%~d#"
)
set "_path=%_path:\=\\%\\"
for /f "skip=1 tokens=* delims=" %%# in (' wmic datafile where "path='%_path%' and drive='%_drive%' and LastModified<='%edate%' and LastModified>='%bdate%'" get Caption /Format:table') do (
for /f "tokens=* delims=" %%A in ("%%#") do (
echo %%A
copy "%%A" "V:\FOLDERBIS"
)
)